<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="androidmanagement_v1.html">Android Management API</a> . <a href="androidmanagement_v1.enterprises.html">enterprises</a> . <a href="androidmanagement_v1.enterprises.webApps.html">webApps</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#create">create(parent, body, x__xgafv=None)</a></code></p>
<p class="firstline">Creates a web app.</p>
<p class="toc_element">
  <code><a href="#delete">delete(name, x__xgafv=None)</a></code></p>
<p class="firstline">Deletes a web app.</p>
<p class="toc_element">
  <code><a href="#get">get(name, x__xgafv=None)</a></code></p>
<p class="firstline">Gets a web app.</p>
<p class="toc_element">
  <code><a href="#list">list(parent, pageSize=None, pageToken=None, x__xgafv=None)</a></code></p>
<p class="firstline">Lists web apps for a given enterprise.</p>
<p class="toc_element">
  <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
<p class="firstline">Retrieves the next page of results.</p>
<p class="toc_element">
  <code><a href="#patch">patch(name, body, updateMask=None, x__xgafv=None)</a></code></p>
<p class="firstline">Updates a web app.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="create">create(parent, body, x__xgafv=None)</code>
  <pre>Creates a web app.

Args:
  parent: string, The name of the enterprise in the form enterprises/{enterpriseId}. (required)
  body: object, The request body. (required)
    The object takes the form of:

{ # A web app.
    "name": "A String", # The name of the web app, which is generated by the server during creation in the form enterprises/{enterpriseId}/webApps/{packageName}.
    "icons": [ # A list of icons for the web app. Must have at least one element.
      { # An icon for a web app. Supported formats are: png, jpg and webp.
        "imageData": "A String", # The actual bytes of the image in a base64url encoded string (c.f. RFC4648, section 5 "Base 64 Encoding with URL and Filename Safe Alphabet"). <ul> <li>The image type can be png or jpg. <li>The image should ideally be square. <li>The image should ideally have a size of 512x512. </ul>
      },
    ],
    "title": "A String", # The title of the web app as displayed to the user (e.g., amongst a list of other applications, or as a label for an icon).
    "displayMode": "A String", # The display mode of the web app.
    "versionCode": "A String", # The current version of the app.<p>Note that the version can automatically increase during the lifetime of the web app, while Google does internal housekeeping to keep the web app up-to-date.
    "startUrl": "A String", # The start URL, i.e. the URL that should load when the user opens the application.
  }

  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A web app.
      "name": "A String", # The name of the web app, which is generated by the server during creation in the form enterprises/{enterpriseId}/webApps/{packageName}.
      "icons": [ # A list of icons for the web app. Must have at least one element.
        { # An icon for a web app. Supported formats are: png, jpg and webp.
          "imageData": "A String", # The actual bytes of the image in a base64url encoded string (c.f. RFC4648, section 5 "Base 64 Encoding with URL and Filename Safe Alphabet"). <ul> <li>The image type can be png or jpg. <li>The image should ideally be square. <li>The image should ideally have a size of 512x512. </ul>
        },
      ],
      "title": "A String", # The title of the web app as displayed to the user (e.g., amongst a list of other applications, or as a label for an icon).
      "displayMode": "A String", # The display mode of the web app.
      "versionCode": "A String", # The current version of the app.<p>Note that the version can automatically increase during the lifetime of the web app, while Google does internal housekeeping to keep the web app up-to-date.
      "startUrl": "A String", # The start URL, i.e. the URL that should load when the user opens the application.
    }</pre>
</div>

<div class="method">
    <code class="details" id="delete">delete(name, x__xgafv=None)</code>
  <pre>Deletes a web app.

Args:
  name: string, The name of the web app in the form enterprises/{enterpriseId}/webApps/{packageName}. (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A generic empty message that you can re-use to avoid defining duplicated empty messages in your APIs. A typical example is to use it as the request or the response type of an API method. For instance:
      # service Foo {
      #   rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty);
      # }
      # The JSON representation for Empty is empty JSON object {}.
  }</pre>
</div>

<div class="method">
    <code class="details" id="get">get(name, x__xgafv=None)</code>
  <pre>Gets a web app.

Args:
  name: string, The name of the web app in the form enterprises/{enterpriseId}/webApp/{packageName}. (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A web app.
      "name": "A String", # The name of the web app, which is generated by the server during creation in the form enterprises/{enterpriseId}/webApps/{packageName}.
      "icons": [ # A list of icons for the web app. Must have at least one element.
        { # An icon for a web app. Supported formats are: png, jpg and webp.
          "imageData": "A String", # The actual bytes of the image in a base64url encoded string (c.f. RFC4648, section 5 "Base 64 Encoding with URL and Filename Safe Alphabet"). <ul> <li>The image type can be png or jpg. <li>The image should ideally be square. <li>The image should ideally have a size of 512x512. </ul>
        },
      ],
      "title": "A String", # The title of the web app as displayed to the user (e.g., amongst a list of other applications, or as a label for an icon).
      "displayMode": "A String", # The display mode of the web app.
      "versionCode": "A String", # The current version of the app.<p>Note that the version can automatically increase during the lifetime of the web app, while Google does internal housekeeping to keep the web app up-to-date.
      "startUrl": "A String", # The start URL, i.e. the URL that should load when the user opens the application.
    }</pre>
</div>

<div class="method">
    <code class="details" id="list">list(parent, pageSize=None, pageToken=None, x__xgafv=None)</code>
  <pre>Lists web apps for a given enterprise.

Args:
  parent: string, The name of the enterprise in the form enterprises/{enterpriseId}. (required)
  pageSize: integer, The requested page size. The actual page size may be fixed to a min or max value.
  pageToken: string, A token identifying a page of results returned by the server.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Response to a request to list web apps for a given enterprise.
    "nextPageToken": "A String", # If there are more results, a token to retrieve next page of results.
    "webApps": [ # The list of web apps.
      { # A web app.
          "name": "A String", # The name of the web app, which is generated by the server during creation in the form enterprises/{enterpriseId}/webApps/{packageName}.
          "icons": [ # A list of icons for the web app. Must have at least one element.
            { # An icon for a web app. Supported formats are: png, jpg and webp.
              "imageData": "A String", # The actual bytes of the image in a base64url encoded string (c.f. RFC4648, section 5 "Base 64 Encoding with URL and Filename Safe Alphabet"). <ul> <li>The image type can be png or jpg. <li>The image should ideally be square. <li>The image should ideally have a size of 512x512. </ul>
            },
          ],
          "title": "A String", # The title of the web app as displayed to the user (e.g., amongst a list of other applications, or as a label for an icon).
          "displayMode": "A String", # The display mode of the web app.
          "versionCode": "A String", # The current version of the app.<p>Note that the version can automatically increase during the lifetime of the web app, while Google does internal housekeeping to keep the web app up-to-date.
          "startUrl": "A String", # The start URL, i.e. the URL that should load when the user opens the application.
        },
    ],
  }</pre>
</div>

<div class="method">
    <code class="details" id="list_next">list_next(previous_request, previous_response)</code>
  <pre>Retrieves the next page of results.

Args:
  previous_request: The request for the previous page. (required)
  previous_response: The response from the request for the previous page. (required)

Returns:
  A request object that you can call 'execute()' on to request the next
  page. Returns None if there are no more items in the collection.
    </pre>
</div>

<div class="method">
    <code class="details" id="patch">patch(name, body, updateMask=None, x__xgafv=None)</code>
  <pre>Updates a web app.

Args:
  name: string, The name of the web app in the form enterprises/{enterpriseId}/webApps/{packageName}. (required)
  body: object, The request body. (required)
    The object takes the form of:

{ # A web app.
    "name": "A String", # The name of the web app, which is generated by the server during creation in the form enterprises/{enterpriseId}/webApps/{packageName}.
    "icons": [ # A list of icons for the web app. Must have at least one element.
      { # An icon for a web app. Supported formats are: png, jpg and webp.
        "imageData": "A String", # The actual bytes of the image in a base64url encoded string (c.f. RFC4648, section 5 "Base 64 Encoding with URL and Filename Safe Alphabet"). <ul> <li>The image type can be png or jpg. <li>The image should ideally be square. <li>The image should ideally have a size of 512x512. </ul>
      },
    ],
    "title": "A String", # The title of the web app as displayed to the user (e.g., amongst a list of other applications, or as a label for an icon).
    "displayMode": "A String", # The display mode of the web app.
    "versionCode": "A String", # The current version of the app.<p>Note that the version can automatically increase during the lifetime of the web app, while Google does internal housekeeping to keep the web app up-to-date.
    "startUrl": "A String", # The start URL, i.e. the URL that should load when the user opens the application.
  }

  updateMask: string, The field mask indicating the fields to update. If not set, all modifiable fields will be modified.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A web app.
      "name": "A String", # The name of the web app, which is generated by the server during creation in the form enterprises/{enterpriseId}/webApps/{packageName}.
      "icons": [ # A list of icons for the web app. Must have at least one element.
        { # An icon for a web app. Supported formats are: png, jpg and webp.
          "imageData": "A String", # The actual bytes of the image in a base64url encoded string (c.f. RFC4648, section 5 "Base 64 Encoding with URL and Filename Safe Alphabet"). <ul> <li>The image type can be png or jpg. <li>The image should ideally be square. <li>The image should ideally have a size of 512x512. </ul>
        },
      ],
      "title": "A String", # The title of the web app as displayed to the user (e.g., amongst a list of other applications, or as a label for an icon).
      "displayMode": "A String", # The display mode of the web app.
      "versionCode": "A String", # The current version of the app.<p>Note that the version can automatically increase during the lifetime of the web app, while Google does internal housekeeping to keep the web app up-to-date.
      "startUrl": "A String", # The start URL, i.e. the URL that should load when the user opens the application.
    }</pre>
</div>

</body></html>