<html><body>
<style>

body, h1, h2, h3, div, span, p, pre, a {
  margin: 0;
  padding: 0;
  border: 0;
  font-weight: inherit;
  font-style: inherit;
  font-size: 100%;
  font-family: inherit;
  vertical-align: baseline;
}

body {
  font-size: 13px;
  padding: 1em;
}

h1 {
  font-size: 26px;
  margin-bottom: 1em;
}

h2 {
  font-size: 24px;
  margin-bottom: 1em;
}

h3 {
  font-size: 20px;
  margin-bottom: 1em;
  margin-top: 1em;
}

pre, code {
  line-height: 1.5;
  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
}

pre {
  margin-top: 0.5em;
}

h1, h2, h3, p {
  font-family: Arial, sans serif;
}

h1, h2, h3 {
  border-bottom: solid #CCC 1px;
}

.toc_element {
  margin-top: 0.5em;
}

.firstline {
  margin-left: 2 em;
}

.method  {
  margin-top: 1em;
  border: solid 1px #CCC;
  padding: 1em;
  background: #EEE;
}

.details {
  font-weight: bold;
  font-size: 14px;
}

</style>

<h1><a href="androidenterprise_v1.html">Google Play EMM API</a> . <a href="androidenterprise_v1.collectionviewers.html">collectionviewers</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#delete">delete(enterpriseId, collectionId, userId)</a></code></p>
<p class="firstline">Removes the user from the list of those specifically allowed to see the collection. If the collection's visibility is set to viewersOnly then only such users will see the collection.</p>
<p class="toc_element">
  <code><a href="#get">get(enterpriseId, collectionId, userId)</a></code></p>
<p class="firstline">Retrieves the ID of the user if they have been specifically allowed to see the collection. If the collection's visibility is set to viewersOnly then only these users will see the collection.</p>
<p class="toc_element">
  <code><a href="#list">list(enterpriseId, collectionId)</a></code></p>
<p class="firstline">Retrieves the IDs of the users who have been specifically allowed to see the collection. If the collection's visibility is set to viewersOnly then only these users will see the collection.</p>
<p class="toc_element">
  <code><a href="#patch">patch(enterpriseId, collectionId, userId, body)</a></code></p>
<p class="firstline">Adds the user to the list of those specifically allowed to see the collection. If the collection's visibility is set to viewersOnly then only such users will see the collection. This method supports patch semantics.</p>
<p class="toc_element">
  <code><a href="#update">update(enterpriseId, collectionId, userId, body)</a></code></p>
<p class="firstline">Adds the user to the list of those specifically allowed to see the collection. If the collection's visibility is set to viewersOnly then only such users will see the collection.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="delete">delete(enterpriseId, collectionId, userId)</code>
  <pre>Removes the user from the list of those specifically allowed to see the collection. If the collection's visibility is set to viewersOnly then only such users will see the collection.

Args:
  enterpriseId: string, The ID of the enterprise. (required)
  collectionId: string, The ID of the collection. (required)
  userId: string, The ID of the user. (required)
</pre>
</div>

<div class="method">
    <code class="details" id="get">get(enterpriseId, collectionId, userId)</code>
  <pre>Retrieves the ID of the user if they have been specifically allowed to see the collection. If the collection's visibility is set to viewersOnly then only these users will see the collection.

Args:
  enterpriseId: string, The ID of the enterprise. (required)
  collectionId: string, The ID of the collection. (required)
  userId: string, The ID of the user. (required)

Returns:
  An object of the form:

    { # A user resource represents an individual user within the enterprise's domain.
        #
        # Note that each user is associated with a Google account based on the user's corporate email address (which must be in one of the enterprise's domains). As part of installing the EMM's DPC app to manage a device the Google account must be provisioned to the device, and so the user resource must be created before that. This can be done using the Google Admin SDK Directory API.
        #
        # The ID for a user is an opaque string. It can be retrieved using the list method queried by the user's primary email address.
      "kind": "androidenterprise#user", # Identifies what kind of resource this is. Value: the fixed string "androidenterprise#user".
      "primaryEmail": "A String", # The user's primary email, e.g. "jsmith@example.com".
      "id": "A String", # The unique ID for the user.
    }</pre>
</div>

<div class="method">
    <code class="details" id="list">list(enterpriseId, collectionId)</code>
  <pre>Retrieves the IDs of the users who have been specifically allowed to see the collection. If the collection's visibility is set to viewersOnly then only these users will see the collection.

Args:
  enterpriseId: string, The ID of the enterprise. (required)
  collectionId: string, The ID of the collection. (required)

Returns:
  An object of the form:

    { # The user resources for the collection.
    "kind": "androidenterprise#collectionViewersListResponse", # Identifies what kind of resource this is. Value: the fixed string "androidenterprise#collectionViewersListResponse".
    "user": [ # A user of an enterprise.
      { # A user resource represents an individual user within the enterprise's domain.
            #
            # Note that each user is associated with a Google account based on the user's corporate email address (which must be in one of the enterprise's domains). As part of installing the EMM's DPC app to manage a device the Google account must be provisioned to the device, and so the user resource must be created before that. This can be done using the Google Admin SDK Directory API.
            #
            # The ID for a user is an opaque string. It can be retrieved using the list method queried by the user's primary email address.
          "kind": "androidenterprise#user", # Identifies what kind of resource this is. Value: the fixed string "androidenterprise#user".
          "primaryEmail": "A String", # The user's primary email, e.g. "jsmith@example.com".
          "id": "A String", # The unique ID for the user.
        },
    ],
  }</pre>
</div>

<div class="method">
    <code class="details" id="patch">patch(enterpriseId, collectionId, userId, body)</code>
  <pre>Adds the user to the list of those specifically allowed to see the collection. If the collection's visibility is set to viewersOnly then only such users will see the collection. This method supports patch semantics.

Args:
  enterpriseId: string, The ID of the enterprise. (required)
  collectionId: string, The ID of the collection. (required)
  userId: string, The ID of the user. (required)
  body: object, The request body. (required)
    The object takes the form of:

{ # A user resource represents an individual user within the enterprise's domain.
      # 
      # Note that each user is associated with a Google account based on the user's corporate email address (which must be in one of the enterprise's domains). As part of installing the EMM's DPC app to manage a device the Google account must be provisioned to the device, and so the user resource must be created before that. This can be done using the Google Admin SDK Directory API.
      # 
      # The ID for a user is an opaque string. It can be retrieved using the list method queried by the user's primary email address.
    "kind": "androidenterprise#user", # Identifies what kind of resource this is. Value: the fixed string "androidenterprise#user".
    "primaryEmail": "A String", # The user's primary email, e.g. "jsmith@example.com".
    "id": "A String", # The unique ID for the user.
  }


Returns:
  An object of the form:

    { # A user resource represents an individual user within the enterprise's domain.
        #
        # Note that each user is associated with a Google account based on the user's corporate email address (which must be in one of the enterprise's domains). As part of installing the EMM's DPC app to manage a device the Google account must be provisioned to the device, and so the user resource must be created before that. This can be done using the Google Admin SDK Directory API.
        #
        # The ID for a user is an opaque string. It can be retrieved using the list method queried by the user's primary email address.
      "kind": "androidenterprise#user", # Identifies what kind of resource this is. Value: the fixed string "androidenterprise#user".
      "primaryEmail": "A String", # The user's primary email, e.g. "jsmith@example.com".
      "id": "A String", # The unique ID for the user.
    }</pre>
</div>

<div class="method">
    <code class="details" id="update">update(enterpriseId, collectionId, userId, body)</code>
  <pre>Adds the user to the list of those specifically allowed to see the collection. If the collection's visibility is set to viewersOnly then only such users will see the collection.

Args:
  enterpriseId: string, The ID of the enterprise. (required)
  collectionId: string, The ID of the collection. (required)
  userId: string, The ID of the user. (required)
  body: object, The request body. (required)
    The object takes the form of:

{ # A user resource represents an individual user within the enterprise's domain.
      # 
      # Note that each user is associated with a Google account based on the user's corporate email address (which must be in one of the enterprise's domains). As part of installing the EMM's DPC app to manage a device the Google account must be provisioned to the device, and so the user resource must be created before that. This can be done using the Google Admin SDK Directory API.
      # 
      # The ID for a user is an opaque string. It can be retrieved using the list method queried by the user's primary email address.
    "kind": "androidenterprise#user", # Identifies what kind of resource this is. Value: the fixed string "androidenterprise#user".
    "primaryEmail": "A String", # The user's primary email, e.g. "jsmith@example.com".
    "id": "A String", # The unique ID for the user.
  }


Returns:
  An object of the form:

    { # A user resource represents an individual user within the enterprise's domain.
        #
        # Note that each user is associated with a Google account based on the user's corporate email address (which must be in one of the enterprise's domains). As part of installing the EMM's DPC app to manage a device the Google account must be provisioned to the device, and so the user resource must be created before that. This can be done using the Google Admin SDK Directory API.
        #
        # The ID for a user is an opaque string. It can be retrieved using the list method queried by the user's primary email address.
      "kind": "androidenterprise#user", # Identifies what kind of resource this is. Value: the fixed string "androidenterprise#user".
      "primaryEmail": "A String", # The user's primary email, e.g. "jsmith@example.com".
      "id": "A String", # The unique ID for the user.
    }</pre>
</div>

</body></html>