<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="firebase_v1beta1.html">Firebase Management API</a> . <a href="firebase_v1beta1.projects.html">projects</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="firebase_v1beta1.projects.androidApps.html">androidApps()</a></code>
</p>
<p class="firstline">Returns the androidApps Resource.</p>

<p class="toc_element">
  <code><a href="firebase_v1beta1.projects.availableLocations.html">availableLocations()</a></code>
</p>
<p class="firstline">Returns the availableLocations Resource.</p>

<p class="toc_element">
  <code><a href="firebase_v1beta1.projects.defaultLocation.html">defaultLocation()</a></code>
</p>
<p class="firstline">Returns the defaultLocation Resource.</p>

<p class="toc_element">
  <code><a href="firebase_v1beta1.projects.iosApps.html">iosApps()</a></code>
</p>
<p class="firstline">Returns the iosApps Resource.</p>

<p class="toc_element">
  <code><a href="firebase_v1beta1.projects.webApps.html">webApps()</a></code>
</p>
<p class="firstline">Returns the webApps Resource.</p>

<p class="toc_element">
  <code><a href="#addFirebase">addFirebase(project, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Adds Firebase resources to the specified existing</p>
<p class="toc_element">
  <code><a href="#addGoogleAnalytics">addGoogleAnalytics(parent, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Links a FirebaseProject with an existing</p>
<p class="toc_element">
  <code><a href="#get">get(name, x__xgafv=None)</a></code></p>
<p class="firstline">Gets the FirebaseProject identified by the specified resource name.</p>
<p class="toc_element">
  <code><a href="#getAdminSdkConfig">getAdminSdkConfig(name, x__xgafv=None)</a></code></p>
<p class="firstline">Gets the configuration artifact used by servers to simplify initialization.</p>
<p class="toc_element">
  <code><a href="#getAnalyticsDetails">getAnalyticsDetails(name, x__xgafv=None)</a></code></p>
<p class="firstline">Gets the Google Analytics details currently associated with a</p>
<p class="toc_element">
  <code><a href="#list">list(pageSize=None, pageToken=None, x__xgafv=None)</a></code></p>
<p class="firstline">Lists each FirebaseProject accessible to the caller.</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=None, updateMask=None, x__xgafv=None)</a></code></p>
<p class="firstline">Updates the attributes of the FirebaseProject identified by the</p>
<p class="toc_element">
  <code><a href="#removeAnalytics">removeAnalytics(parent, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Unlinks the specified `FirebaseProject` from its Google Analytics account.</p>
<p class="toc_element">
  <code><a href="#searchApps">searchApps(parent, pageSize=None, pageToken=None, x__xgafv=None)</a></code></p>
<p class="firstline">A convenience method that lists all available Apps for the specified</p>
<p class="toc_element">
  <code><a href="#searchApps_next">searchApps_next(previous_request, previous_response)</a></code></p>
<p class="firstline">Retrieves the next page of results.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="addFirebase">addFirebase(project, body=None, x__xgafv=None)</code>
  <pre>Adds Firebase resources to the specified existing
[Google Cloud Platform (GCP) `Project`]
(https://cloud.google.com/resource-manager/reference/rest/v1/projects).
&lt;br&gt;
&lt;br&gt;Since a FirebaseProject is actually also a GCP `Project`, a
`FirebaseProject` uses underlying GCP identifiers (most importantly,
the `PROJECT_NUMBER`) as its own for easy interop with GCP APIs.
&lt;br&gt;
&lt;br&gt;The result of this call is an [`Operation`](../../v1beta1/operations).
Poll the `Operation` to track the provisioning process by calling
GetOperation until
[`done`](../../v1beta1/operations#Operation.FIELDS.done) is `true`. When
`done` is `true`, the `Operation` has either succeeded or failed. If the
`Operation` succeeded, its
[`response`](../../v1beta1/operations#Operation.FIELDS.response) is set to
a FirebaseProject; if the `Operation` failed, its
[`error`](../../v1beta1/operations#Operation.FIELDS.error) is set to a
google.rpc.Status. The `Operation` is automatically deleted after
completion, so there is no need to call
DeleteOperation.
&lt;br&gt;
&lt;br&gt;This method does not modify any billing account information on the
underlying GCP `Project`.
&lt;br&gt;
&lt;br&gt;To call `AddFirebase`, a project member or service account must have
the following permissions (the IAM roles of Editor and Owner contain these
permissions):
`firebase.projects.update`, `resourcemanager.projects.get`,
`serviceusage.services.enable`, and `serviceusage.services.get`.

Args:
  project: string, The resource name of the GCP `Project` to which Firebase resources will be
added, in the format:
&lt;br&gt;&lt;code&gt;projects/&lt;var&gt;PROJECT_NUMBER&lt;/var&gt;&lt;/code&gt;
After calling `AddFirebase`, the
[`project_id`](https://cloud.google.com/resource-manager/reference/rest/v1/projects#Project.FIELDS.project_id)
of the GCP `Project` is also the `project_id` of the FirebaseProject. (required)
  body: object, The request body.
    The object takes the form of:

{ # All fields are required.
    &quot;timeZone&quot;: &quot;A String&quot;, # Deprecated. Instead, to link your Project with a Google Analytics account,
        # call [`AddGoogleAnalytics`](../../v1beta1/projects/addGoogleAnalytics)
        # after you add Firebase resources to your Project.
        # &lt;br&gt;
        # &lt;br&gt;The time zone that the account will use for Firebase Analytics data.
        # &lt;br&gt;For example: America/Los_Angeles or Africa/Abidjan
    &quot;locationId&quot;: &quot;A String&quot;, # Deprecated. Instead, to set your project&#x27;s default GCP resource location,
        # call [`FinalizeDefaultLocation`](../projects.defaultLocation/finalize)
        # after you add Firebase resources to your project.
        # &lt;br&gt;
        # &lt;br&gt;The ID of the project&#x27;s default GCP resource location. The location
        # must be one of the available
        # [GCP resource
        # locations](https://firebase.google.com/docs/projects/locations).
    &quot;regionCode&quot;: &quot;A String&quot;, # Deprecated. Instead, to link your Project with a Google Analytics account,
        # call [`AddGoogleAnalytics`](../../v1beta1/projects/addGoogleAnalytics)
        # after you add Firebase resources to your Project.
        # &lt;br&gt;
        # &lt;br&gt;The region code (CLDR) that the account will use for Firebase Analytics
        # data.
        # &lt;br&gt;For example: US, GB, or DE
        # &lt;br&gt;
        # &lt;br&gt;In Java, use `com.google.i18n.identifiers.RegionCode`.
  }

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

Returns:
  An object of the form:

    { # This resource represents a long-running operation that is the result of a
      # network API call.
    &quot;metadata&quot;: { # Service-specific metadata associated with the operation.  It typically
        # contains progress information and common metadata such as create time.
        # Some services might not provide such metadata.  Any method that returns a
        # long-running operation should document the metadata type, if any.
      &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
    },
    &quot;error&quot;: { # The `Status` type defines a logical error model that is suitable for # The error result of the operation in case of failure or cancellation.
        # different programming environments, including REST APIs and RPC APIs. It is
        # used by [gRPC](https://github.com/grpc). Each `Status` message contains
        # three pieces of data: error code, error message, and error details.
        #
        # You can find out more about this error model and how to work with it in the
        # [API Design Guide](https://cloud.google.com/apis/design/errors).
      &quot;message&quot;: &quot;A String&quot;, # A developer-facing error message, which should be in English. Any
          # user-facing error message should be localized and sent in the
          # google.rpc.Status.details field, or localized by the client.
      &quot;details&quot;: [ # A list of messages that carry the error details.  There is a common set of
          # message types for APIs to use.
        {
          &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
        },
      ],
      &quot;code&quot;: 42, # The status code, which should be an enum value of google.rpc.Code.
    },
    &quot;name&quot;: &quot;A String&quot;, # The server-assigned name, which is only unique within the same service that
        # originally returns it. If you use the default HTTP mapping, the
        # `name` should be a resource name ending with `operations/{unique_id}`.
    &quot;response&quot;: { # The normal response of the operation in case of success.  If the original
        # method returns no data on success, such as `Delete`, the response is
        # `google.protobuf.Empty`.  If the original method is standard
        # `Get`/`Create`/`Update`, the response should be the resource.  For other
        # methods, the response should have the type `XxxResponse`, where `Xxx`
        # is the original method name.  For example, if the original method name
        # is `TakeSnapshot()`, the inferred response type is
        # `TakeSnapshotResponse`.
      &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
    },
    &quot;done&quot;: True or False, # If the value is `false`, it means the operation is still in progress.
        # If `true`, the operation is completed, and either `error` or `response` is
        # available.
  }</pre>
</div>

<div class="method">
    <code class="details" id="addGoogleAnalytics">addGoogleAnalytics(parent, body=None, x__xgafv=None)</code>
  <pre>Links a FirebaseProject with an existing
[Google Analytics account](http://www.google.com/analytics/).
&lt;br&gt;
&lt;br&gt;Using this call, you can either:
&lt;ul&gt;
&lt;li&gt;Specify an `analyticsAccountId` to provision a new Google Analytics
property within the specified account and associate the new property with
your `FirebaseProject`.&lt;/li&gt;
&lt;li&gt;Specify an existing `analyticsPropertyId` to associate the property
with your `FirebaseProject`.&lt;/li&gt;
&lt;/ul&gt;
&lt;br&gt;
Note that when you call `AddGoogleAnalytics`:
&lt;ol&gt;
&lt;li&gt;The first check determines if any existing data streams in the
Google Analytics property correspond to any existing Firebase Apps in your
`FirebaseProject` (based on the `packageName` or `bundleId` associated with
the data stream). Then, as applicable, the data streams and apps are
linked. Note that this auto-linking only applies to Android Apps and iOS
Apps.&lt;/li&gt;
&lt;li&gt;If no corresponding data streams are found for your Firebase Apps,
new data streams are provisioned in the Google Analytics property
for each of your Firebase Apps. Note that a new data stream is always
provisioned for a Web App even if it was previously associated with a
data stream in your Analytics property.&lt;/li&gt;
&lt;/ol&gt;
Learn more about the hierarchy and structure of Google Analytics
accounts in the
[Analytics
documentation](https://support.google.com/analytics/answer/9303323).
&lt;br&gt;
&lt;br&gt;The result of this call is an [`Operation`](../../v1beta1/operations).
Poll the `Operation` to track the provisioning process by calling
GetOperation until
[`done`](../../v1beta1/operations#Operation.FIELDS.done) is `true`. When
`done` is `true`, the `Operation` has either succeeded or failed. If the
`Operation` succeeded, its
[`response`](../../v1beta1/operations#Operation.FIELDS.response) is set to
an AnalyticsDetails; if the `Operation` failed, its
[`error`](../../v1beta1/operations#Operation.FIELDS.error) is set to a
google.rpc.Status.
&lt;br&gt;
&lt;br&gt;To call `AddGoogleAnalytics`, a member must be an Owner for
the existing `FirebaseProject` and have the
[`Edit` permission](https://support.google.com/analytics/answer/2884495)
for the Google Analytics account.
&lt;br&gt;
&lt;br&gt;If a `FirebaseProject` already has Google Analytics enabled, and you
call `AddGoogleAnalytics` using an `analyticsPropertyId` that&#x27;s different
from the currently associated property, then the call will fail. Analytics
may have already been enabled in the Firebase console or by specifying
`timeZone` and `regionCode` in the call to
[`AddFirebase`](../../v1beta1/projects/addFirebase).

Args:
  parent: string, The parent `FirebaseProject` to link to an existing Google Analytics
account, in the format:
&lt;br&gt;&lt;code&gt;projects/&lt;var&gt;PROJECT_NUMBER&lt;/var&gt;&lt;/code&gt; (required)
  body: object, The request body.
    The object takes the form of:

{
    &quot;analyticsPropertyId&quot;: &quot;A String&quot;, # The ID for the existing Google Analytics property that you want to
        # associate with your `FirebaseProject`.
    &quot;analyticsAccountId&quot;: &quot;A String&quot;, # The ID for the existing
        # [Google Analytics account](http://www.google.com/analytics/) that you
        # want to link with your `FirebaseProject`.
        # &lt;br&gt;
        # &lt;br&gt;Specifying this field will provision a new Google Analytics
        # property in your Google Analytics account and associate the new property
        # with your `FirebaseProject`.
  }

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

Returns:
  An object of the form:

    { # This resource represents a long-running operation that is the result of a
      # network API call.
    &quot;metadata&quot;: { # Service-specific metadata associated with the operation.  It typically
        # contains progress information and common metadata such as create time.
        # Some services might not provide such metadata.  Any method that returns a
        # long-running operation should document the metadata type, if any.
      &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
    },
    &quot;error&quot;: { # The `Status` type defines a logical error model that is suitable for # The error result of the operation in case of failure or cancellation.
        # different programming environments, including REST APIs and RPC APIs. It is
        # used by [gRPC](https://github.com/grpc). Each `Status` message contains
        # three pieces of data: error code, error message, and error details.
        #
        # You can find out more about this error model and how to work with it in the
        # [API Design Guide](https://cloud.google.com/apis/design/errors).
      &quot;message&quot;: &quot;A String&quot;, # A developer-facing error message, which should be in English. Any
          # user-facing error message should be localized and sent in the
          # google.rpc.Status.details field, or localized by the client.
      &quot;details&quot;: [ # A list of messages that carry the error details.  There is a common set of
          # message types for APIs to use.
        {
          &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
        },
      ],
      &quot;code&quot;: 42, # The status code, which should be an enum value of google.rpc.Code.
    },
    &quot;name&quot;: &quot;A String&quot;, # The server-assigned name, which is only unique within the same service that
        # originally returns it. If you use the default HTTP mapping, the
        # `name` should be a resource name ending with `operations/{unique_id}`.
    &quot;response&quot;: { # The normal response of the operation in case of success.  If the original
        # method returns no data on success, such as `Delete`, the response is
        # `google.protobuf.Empty`.  If the original method is standard
        # `Get`/`Create`/`Update`, the response should be the resource.  For other
        # methods, the response should have the type `XxxResponse`, where `Xxx`
        # is the original method name.  For example, if the original method name
        # is `TakeSnapshot()`, the inferred response type is
        # `TakeSnapshotResponse`.
      &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
    },
    &quot;done&quot;: True or False, # If the value is `false`, it means the operation is still in progress.
        # If `true`, the operation is completed, and either `error` or `response` is
        # available.
  }</pre>
</div>

<div class="method">
    <code class="details" id="get">get(name, x__xgafv=None)</code>
  <pre>Gets the FirebaseProject identified by the specified resource name.

Args:
  name: string, The fully qualified resource name of the Project, in the format:
&lt;br&gt;&lt;code&gt;projects/&lt;var&gt;PROJECT_NUMBER&lt;/var&gt;&lt;/code&gt; (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A `FirebaseProject` is the top-level Firebase entity. It is the container for
        # Firebase Apps, Firebase Hosting sites, storage systems (Firebase Realtime
        # Database, Cloud Firestore, Cloud Storage buckets) and other Firebase and
        # Google Cloud Platform (GCP) resources.
        # &lt;br&gt;
        # &lt;br&gt;You can create a new `FirebaseProject` in the
        # [Firebase console](https://console.firebase.google.com/),
        # or you can add Firebase resources to an existing
        # [GCP
        # `Project`](https://cloud.google.com/resource-manager/reference/rest/v1/projects)
        # by calling
        # AddFirebase.
        # &lt;br&gt;
        # &lt;br&gt;A `FirebaseProject` is actually also a GCP `Project`, so a
        # `FirebaseProject` uses underlying GCP identifiers (most importantly,
        # `projectId`) as its own for easy interop with GCP APIs.
      &quot;name&quot;: &quot;A String&quot;, # The fully qualified resource name of the Project, in the format:
          # &lt;br&gt;&lt;code&gt;projects/&lt;var&gt;projectId&lt;/var&gt;&lt;/code&gt;
      &quot;resources&quot;: { # The default resources associated with a `FirebaseProject`. # The default Firebase resources associated with the Project.
        &quot;locationId&quot;: &quot;A String&quot;, # The ID of the project&#x27;s default GCP resource location. The location is one
            # of the available
            # [GCP resource
            # locations](https://firebase.google.com/docs/projects/locations). &lt;br&gt;
            # &lt;br&gt;This field is omitted if the default GCP resource location has not been
            # finalized yet. To set your project&#x27;s default GCP resource location,
            # call [`FinalizeDefaultLocation`](../projects.defaultLocation/finalize)
            # after you add Firebase services to your project.
        &quot;storageBucket&quot;: &quot;A String&quot;, # The default Cloud Storage for Firebase storage bucket, in the format:
            # &lt;br&gt;&lt;code&gt;&lt;var&gt;projectId&lt;/var&gt;.appspot.com&lt;/code&gt;
        &quot;hostingSite&quot;: &quot;A String&quot;, # The default Firebase Hosting site name, in the format:
            # &lt;br&gt;&lt;code&gt;&lt;var&gt;projectId&lt;/var&gt;&lt;/code&gt;
            # &lt;br&gt;Though rare, your `projectId` might already be used as the name for an
            # existing Hosting site in another project (learn more about creating
            # non-default,
            # [additional sites](https://firebase.google.com/docs/hosting/multisites)).
            # In these cases, your `projectId` is appended with a hyphen then five
            # alphanumeric characters to create your default Hosting site name. For
            # example, if your `projectId` is `myproject123`, your default Hosting site
            # name might be:
            # &lt;br&gt;&lt;code&gt;myproject123-a5c16&lt;/code&gt;
        &quot;realtimeDatabaseInstance&quot;: &quot;A String&quot;, # The default Firebase Realtime Database instance name, in the format:
            # &lt;br&gt;&lt;code&gt;&lt;var&gt;projectId&lt;/var&gt;&lt;/code&gt;
            # &lt;br&gt;Though rare, your `projectId` might already be used as the name for an
            # existing Realtime Database instance in another project (learn more about
            # [database
            # sharding](https://firebase.google.com/docs/database/usage/sharding)). In
            # these cases, your `projectId` is appended with a hyphen then five
            # alphanumeric characters to create your default Realtime Database instance
            # name. For example, if your `projectId` is `myproject123`, your default
            # database instance name might be:
            # &lt;br&gt;&lt;code&gt;myproject123-a5c16&lt;/code&gt;
      },
      &quot;displayName&quot;: &quot;A String&quot;, # The user-assigned display name of the Project.
      &quot;projectId&quot;: &quot;A String&quot;, # Immutable. The globally unique, user-assigned ID of the Project.
      &quot;projectNumber&quot;: &quot;A String&quot;, # The globally unique, Google-assigned identifier of the Project.
    }</pre>
</div>

<div class="method">
    <code class="details" id="getAdminSdkConfig">getAdminSdkConfig(name, x__xgafv=None)</code>
  <pre>Gets the configuration artifact used by servers to simplify initialization.
&lt;br&gt;
&lt;br&gt;Typically, this configuration is used with the Firebase Admin SDK
[initializeApp](https://firebase.google.com/docs/admin/setup#initialize_the_sdk)
command.

Args:
  name: string, The fully qualified resource name of the Project, in the format:
&lt;br&gt;&lt;code&gt;projects/&lt;var&gt;PROJECT_NUMBER&lt;/var&gt;/adminSdkConfig&lt;/code&gt; (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    {
    &quot;databaseURL&quot;: &quot;A String&quot;, # The default Firebase Realtime Database URL.
    &quot;locationId&quot;: &quot;A String&quot;, # The ID of the project&#x27;s default GCP resource location. The location is one
        # of the available
        # [GCP resource
        # locations](https://firebase.google.com/docs/projects/locations). &lt;br&gt;
        # &lt;br&gt;This field is omitted if the default GCP resource location has not been
        # finalized yet. To set your project&#x27;s default GCP resource location,
        # call [`FinalizeDefaultLocation`](../projects.defaultLocation/finalize)
        # after you add Firebase services to your project.
    &quot;storageBucket&quot;: &quot;A String&quot;, # The default Cloud Storage for Firebase storage bucket name.
    &quot;projectId&quot;: &quot;A String&quot;, # Immutable. The globally unique, user-assigned project ID of the parent
        # Project.
  }</pre>
</div>

<div class="method">
    <code class="details" id="getAnalyticsDetails">getAnalyticsDetails(name, x__xgafv=None)</code>
  <pre>Gets the Google Analytics details currently associated with a
FirebaseProject.
&lt;br&gt;
&lt;br&gt;If the `FirebaseProject` is not yet linked to Google Analytics, then
the response to `GetAnalyticsDetails` is NOT_FOUND.

Args:
  name: string, The fully qualified resource name, in the format:
&lt;br&gt;&lt;code&gt;projects/&lt;var&gt;PROJECT_NUMBER&lt;/var&gt;/analyticsDetails&lt;/code&gt; (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    {
    &quot;analyticsProperty&quot;: { # Details of a Google Analytics property # The Analytics Property object associated with the specified
        # `FirebaseProject`.
        # &lt;br&gt;
        # &lt;br&gt;This object contains the details of the Google Analytics property
        # associated with the specified `FirebaseProject`.
      &quot;displayName&quot;: &quot;A String&quot;, # The display name of the Google Analytics property associated with the
          # specified `FirebaseProject`.
      &quot;id&quot;: &quot;A String&quot;, # The globally unique, Google-assigned identifier of the Google Analytics
          # property associated with the specified `FirebaseProject`.
          # &lt;br&gt;
          # &lt;br&gt;If you called
          # [`AddGoogleAnalytics`](../../v1beta1/projects/addGoogleAnalytics) to link
          # your `FirebaseProject` with a Google Analytics account, the value in this
          # `id` field is the same as the ID of the property either specified or
          # provisioned with that call to `AddGoogleAnalytics`.
    },
    &quot;streamMappings&quot;: [ # For Android Apps and iOS Apps: A map of `app` to `streamId` for each
        # Firebase App in the specified `FirebaseProject`. Each `app` and
        # `streamId` appears only once.&lt;br&gt;
        # &lt;br&gt;
        # For Web Apps: A map of `app` to `streamId` and `measurementId` for each
        # Firebase App in the specified `FirebaseProject`. Each `app`, `streamId`,
        # and `measurementId` appears only once.
      { # A mapping of a Firebase App to a Google Analytics data stream
        &quot;measurementId&quot;: &quot;A String&quot;, # Applicable for Firebase Web Apps only.&lt;br&gt;
            # &lt;br&gt;The unique Google-assigned identifier of the Google Analytics web
            # stream associated with the Firebase Web App. Firebase SDKs use this ID to
            # interact with Google Analytics APIs.
            # &lt;br&gt;
            # &lt;br&gt;Learn more about this ID and Google Analytics web streams in the
            # [Analytics
            # documentation](https://support.google.com/analytics/topic/9303475).
        &quot;streamId&quot;: &quot;A String&quot;, # The unique Google-assigned identifier of the Google Analytics data stream
            # associated with the Firebase App.
            # &lt;br&gt;
            # &lt;br&gt;Learn more about Google Analytics data streams in the
            # [Analytics
            # documentation](https://support.google.com/analytics/answer/9303323).
        &quot;app&quot;: &quot;A String&quot;, # The fully qualified resource name of the Firebase App associated with the
            # Google Analytics data stream, in the format:
            # &lt;br&gt;&lt;code&gt;projects/&lt;var&gt;PROJECT_NUMBER&lt;/var&gt;/androidApps/&lt;var&gt;APP_ID&lt;/var&gt;&lt;/code&gt;
            # or
            # &lt;code&gt;projects/&lt;var&gt;PROJECT_NUMBER&lt;/var&gt;/iosApps/&lt;var&gt;APP_ID&lt;/var&gt;&lt;/code&gt;
            # or
            # &lt;code&gt;projects/&lt;var&gt;PROJECT_NUMBER&lt;/var&gt;/webApps/&lt;var&gt;APP_ID&lt;/var&gt;&lt;/code&gt;
      },
    ],
  }</pre>
</div>

<div class="method">
    <code class="details" id="list">list(pageSize=None, pageToken=None, x__xgafv=None)</code>
  <pre>Lists each FirebaseProject accessible to the caller.
&lt;br&gt;
&lt;br&gt;The elements are returned in no particular order, but they will be a
consistent view of the Projects when additional requests are made with a
`pageToken`.
&lt;br&gt;
&lt;br&gt;This method is eventually consistent with Project mutations, which
means newly provisioned Projects and recent modifications to existing
Projects might not be reflected in the set of Projects. The list will
include only ACTIVE Projects.
&lt;br&gt;
&lt;br&gt;Use
GetFirebaseProject
for consistent reads as well as for additional Project details.

Args:
  pageSize: integer, The maximum number of Projects to return in the response.
&lt;br&gt;
&lt;br&gt;The server may return fewer than this at its discretion.
If no value is specified (or too large a value is specified), the server
will impose its own limit.
&lt;br&gt;
&lt;br&gt;This value cannot be negative.
  pageToken: string, Token returned from a previous call to `ListFirebaseProjects` indicating
where in the set of Projects to resume listing.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    {
    &quot;results&quot;: [ # One page of the list of Projects that are accessible to the caller.
      { # A `FirebaseProject` is the top-level Firebase entity. It is the container for
            # Firebase Apps, Firebase Hosting sites, storage systems (Firebase Realtime
            # Database, Cloud Firestore, Cloud Storage buckets) and other Firebase and
            # Google Cloud Platform (GCP) resources.
            # &lt;br&gt;
            # &lt;br&gt;You can create a new `FirebaseProject` in the
            # [Firebase console](https://console.firebase.google.com/),
            # or you can add Firebase resources to an existing
            # [GCP
            # `Project`](https://cloud.google.com/resource-manager/reference/rest/v1/projects)
            # by calling
            # AddFirebase.
            # &lt;br&gt;
            # &lt;br&gt;A `FirebaseProject` is actually also a GCP `Project`, so a
            # `FirebaseProject` uses underlying GCP identifiers (most importantly,
            # `projectId`) as its own for easy interop with GCP APIs.
          &quot;name&quot;: &quot;A String&quot;, # The fully qualified resource name of the Project, in the format:
              # &lt;br&gt;&lt;code&gt;projects/&lt;var&gt;projectId&lt;/var&gt;&lt;/code&gt;
          &quot;resources&quot;: { # The default resources associated with a `FirebaseProject`. # The default Firebase resources associated with the Project.
            &quot;locationId&quot;: &quot;A String&quot;, # The ID of the project&#x27;s default GCP resource location. The location is one
                # of the available
                # [GCP resource
                # locations](https://firebase.google.com/docs/projects/locations). &lt;br&gt;
                # &lt;br&gt;This field is omitted if the default GCP resource location has not been
                # finalized yet. To set your project&#x27;s default GCP resource location,
                # call [`FinalizeDefaultLocation`](../projects.defaultLocation/finalize)
                # after you add Firebase services to your project.
            &quot;storageBucket&quot;: &quot;A String&quot;, # The default Cloud Storage for Firebase storage bucket, in the format:
                # &lt;br&gt;&lt;code&gt;&lt;var&gt;projectId&lt;/var&gt;.appspot.com&lt;/code&gt;
            &quot;hostingSite&quot;: &quot;A String&quot;, # The default Firebase Hosting site name, in the format:
                # &lt;br&gt;&lt;code&gt;&lt;var&gt;projectId&lt;/var&gt;&lt;/code&gt;
                # &lt;br&gt;Though rare, your `projectId` might already be used as the name for an
                # existing Hosting site in another project (learn more about creating
                # non-default,
                # [additional sites](https://firebase.google.com/docs/hosting/multisites)).
                # In these cases, your `projectId` is appended with a hyphen then five
                # alphanumeric characters to create your default Hosting site name. For
                # example, if your `projectId` is `myproject123`, your default Hosting site
                # name might be:
                # &lt;br&gt;&lt;code&gt;myproject123-a5c16&lt;/code&gt;
            &quot;realtimeDatabaseInstance&quot;: &quot;A String&quot;, # The default Firebase Realtime Database instance name, in the format:
                # &lt;br&gt;&lt;code&gt;&lt;var&gt;projectId&lt;/var&gt;&lt;/code&gt;
                # &lt;br&gt;Though rare, your `projectId` might already be used as the name for an
                # existing Realtime Database instance in another project (learn more about
                # [database
                # sharding](https://firebase.google.com/docs/database/usage/sharding)). In
                # these cases, your `projectId` is appended with a hyphen then five
                # alphanumeric characters to create your default Realtime Database instance
                # name. For example, if your `projectId` is `myproject123`, your default
                # database instance name might be:
                # &lt;br&gt;&lt;code&gt;myproject123-a5c16&lt;/code&gt;
          },
          &quot;displayName&quot;: &quot;A String&quot;, # The user-assigned display name of the Project.
          &quot;projectId&quot;: &quot;A String&quot;, # Immutable. The globally unique, user-assigned ID of the Project.
          &quot;projectNumber&quot;: &quot;A String&quot;, # The globally unique, Google-assigned identifier of the Project.
        },
    ],
    &quot;nextPageToken&quot;: &quot;A String&quot;, # If the result list is too large to fit in a single response, then a token
        # is returned. If the string is empty, then this response is the last page of
        # results.
        # &lt;br&gt;
        # &lt;br&gt;This token can be used in a subsequent calls to `ListFirebaseProjects`
        # to find the next group of Projects.
        # &lt;br&gt;
        # &lt;br&gt;Page tokens are short-lived and should not be persisted.
  }</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 &#x27;execute()&#x27; 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=None, updateMask=None, x__xgafv=None)</code>
  <pre>Updates the attributes of the FirebaseProject identified by the
specified resource name.
&lt;br&gt;
&lt;br&gt;All [query parameters](#query-parameters) are required.

Args:
  name: string, The fully qualified resource name of the Project, in the format:
&lt;br&gt;&lt;code&gt;projects/&lt;var&gt;projectId&lt;/var&gt;&lt;/code&gt; (required)
  body: object, The request body.
    The object takes the form of:

{ # A `FirebaseProject` is the top-level Firebase entity. It is the container for
      # Firebase Apps, Firebase Hosting sites, storage systems (Firebase Realtime
      # Database, Cloud Firestore, Cloud Storage buckets) and other Firebase and
      # Google Cloud Platform (GCP) resources.
      # &lt;br&gt;
      # &lt;br&gt;You can create a new `FirebaseProject` in the
      # [Firebase console](https://console.firebase.google.com/),
      # or you can add Firebase resources to an existing
      # [GCP
      # `Project`](https://cloud.google.com/resource-manager/reference/rest/v1/projects)
      # by calling
      # AddFirebase.
      # &lt;br&gt;
      # &lt;br&gt;A `FirebaseProject` is actually also a GCP `Project`, so a
      # `FirebaseProject` uses underlying GCP identifiers (most importantly,
      # `projectId`) as its own for easy interop with GCP APIs.
    &quot;name&quot;: &quot;A String&quot;, # The fully qualified resource name of the Project, in the format:
        # &lt;br&gt;&lt;code&gt;projects/&lt;var&gt;projectId&lt;/var&gt;&lt;/code&gt;
    &quot;resources&quot;: { # The default resources associated with a `FirebaseProject`. # The default Firebase resources associated with the Project.
      &quot;locationId&quot;: &quot;A String&quot;, # The ID of the project&#x27;s default GCP resource location. The location is one
          # of the available
          # [GCP resource
          # locations](https://firebase.google.com/docs/projects/locations). &lt;br&gt;
          # &lt;br&gt;This field is omitted if the default GCP resource location has not been
          # finalized yet. To set your project&#x27;s default GCP resource location,
          # call [`FinalizeDefaultLocation`](../projects.defaultLocation/finalize)
          # after you add Firebase services to your project.
      &quot;storageBucket&quot;: &quot;A String&quot;, # The default Cloud Storage for Firebase storage bucket, in the format:
          # &lt;br&gt;&lt;code&gt;&lt;var&gt;projectId&lt;/var&gt;.appspot.com&lt;/code&gt;
      &quot;hostingSite&quot;: &quot;A String&quot;, # The default Firebase Hosting site name, in the format:
          # &lt;br&gt;&lt;code&gt;&lt;var&gt;projectId&lt;/var&gt;&lt;/code&gt;
          # &lt;br&gt;Though rare, your `projectId` might already be used as the name for an
          # existing Hosting site in another project (learn more about creating
          # non-default,
          # [additional sites](https://firebase.google.com/docs/hosting/multisites)).
          # In these cases, your `projectId` is appended with a hyphen then five
          # alphanumeric characters to create your default Hosting site name. For
          # example, if your `projectId` is `myproject123`, your default Hosting site
          # name might be:
          # &lt;br&gt;&lt;code&gt;myproject123-a5c16&lt;/code&gt;
      &quot;realtimeDatabaseInstance&quot;: &quot;A String&quot;, # The default Firebase Realtime Database instance name, in the format:
          # &lt;br&gt;&lt;code&gt;&lt;var&gt;projectId&lt;/var&gt;&lt;/code&gt;
          # &lt;br&gt;Though rare, your `projectId` might already be used as the name for an
          # existing Realtime Database instance in another project (learn more about
          # [database
          # sharding](https://firebase.google.com/docs/database/usage/sharding)). In
          # these cases, your `projectId` is appended with a hyphen then five
          # alphanumeric characters to create your default Realtime Database instance
          # name. For example, if your `projectId` is `myproject123`, your default
          # database instance name might be:
          # &lt;br&gt;&lt;code&gt;myproject123-a5c16&lt;/code&gt;
    },
    &quot;displayName&quot;: &quot;A String&quot;, # The user-assigned display name of the Project.
    &quot;projectId&quot;: &quot;A String&quot;, # Immutable. The globally unique, user-assigned ID of the Project.
    &quot;projectNumber&quot;: &quot;A String&quot;, # The globally unique, Google-assigned identifier of the Project.
  }

  updateMask: string, Specifies which fields to update.
&lt;br&gt;
&lt;br&gt;If this list is empty, then no state will be updated.
&lt;br&gt;Note that the fields `name`, `project_id`, and `project_number` are all
immutable.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A `FirebaseProject` is the top-level Firebase entity. It is the container for
        # Firebase Apps, Firebase Hosting sites, storage systems (Firebase Realtime
        # Database, Cloud Firestore, Cloud Storage buckets) and other Firebase and
        # Google Cloud Platform (GCP) resources.
        # &lt;br&gt;
        # &lt;br&gt;You can create a new `FirebaseProject` in the
        # [Firebase console](https://console.firebase.google.com/),
        # or you can add Firebase resources to an existing
        # [GCP
        # `Project`](https://cloud.google.com/resource-manager/reference/rest/v1/projects)
        # by calling
        # AddFirebase.
        # &lt;br&gt;
        # &lt;br&gt;A `FirebaseProject` is actually also a GCP `Project`, so a
        # `FirebaseProject` uses underlying GCP identifiers (most importantly,
        # `projectId`) as its own for easy interop with GCP APIs.
      &quot;name&quot;: &quot;A String&quot;, # The fully qualified resource name of the Project, in the format:
          # &lt;br&gt;&lt;code&gt;projects/&lt;var&gt;projectId&lt;/var&gt;&lt;/code&gt;
      &quot;resources&quot;: { # The default resources associated with a `FirebaseProject`. # The default Firebase resources associated with the Project.
        &quot;locationId&quot;: &quot;A String&quot;, # The ID of the project&#x27;s default GCP resource location. The location is one
            # of the available
            # [GCP resource
            # locations](https://firebase.google.com/docs/projects/locations). &lt;br&gt;
            # &lt;br&gt;This field is omitted if the default GCP resource location has not been
            # finalized yet. To set your project&#x27;s default GCP resource location,
            # call [`FinalizeDefaultLocation`](../projects.defaultLocation/finalize)
            # after you add Firebase services to your project.
        &quot;storageBucket&quot;: &quot;A String&quot;, # The default Cloud Storage for Firebase storage bucket, in the format:
            # &lt;br&gt;&lt;code&gt;&lt;var&gt;projectId&lt;/var&gt;.appspot.com&lt;/code&gt;
        &quot;hostingSite&quot;: &quot;A String&quot;, # The default Firebase Hosting site name, in the format:
            # &lt;br&gt;&lt;code&gt;&lt;var&gt;projectId&lt;/var&gt;&lt;/code&gt;
            # &lt;br&gt;Though rare, your `projectId` might already be used as the name for an
            # existing Hosting site in another project (learn more about creating
            # non-default,
            # [additional sites](https://firebase.google.com/docs/hosting/multisites)).
            # In these cases, your `projectId` is appended with a hyphen then five
            # alphanumeric characters to create your default Hosting site name. For
            # example, if your `projectId` is `myproject123`, your default Hosting site
            # name might be:
            # &lt;br&gt;&lt;code&gt;myproject123-a5c16&lt;/code&gt;
        &quot;realtimeDatabaseInstance&quot;: &quot;A String&quot;, # The default Firebase Realtime Database instance name, in the format:
            # &lt;br&gt;&lt;code&gt;&lt;var&gt;projectId&lt;/var&gt;&lt;/code&gt;
            # &lt;br&gt;Though rare, your `projectId` might already be used as the name for an
            # existing Realtime Database instance in another project (learn more about
            # [database
            # sharding](https://firebase.google.com/docs/database/usage/sharding)). In
            # these cases, your `projectId` is appended with a hyphen then five
            # alphanumeric characters to create your default Realtime Database instance
            # name. For example, if your `projectId` is `myproject123`, your default
            # database instance name might be:
            # &lt;br&gt;&lt;code&gt;myproject123-a5c16&lt;/code&gt;
      },
      &quot;displayName&quot;: &quot;A String&quot;, # The user-assigned display name of the Project.
      &quot;projectId&quot;: &quot;A String&quot;, # Immutable. The globally unique, user-assigned ID of the Project.
      &quot;projectNumber&quot;: &quot;A String&quot;, # The globally unique, Google-assigned identifier of the Project.
    }</pre>
</div>

<div class="method">
    <code class="details" id="removeAnalytics">removeAnalytics(parent, body=None, x__xgafv=None)</code>
  <pre>Unlinks the specified `FirebaseProject` from its Google Analytics account.
&lt;br&gt;
&lt;br&gt;This call removes the association of the specified `FirebaseProject`
with its current Google Analytics property. However, this call does not
delete the Google Analytics resources, such as the Google Analytics
property or any data streams.
&lt;br&gt;
&lt;br&gt;These resources may be re-associated later to the `FirebaseProject` by
calling
[`AddGoogleAnalytics`](../../v1beta1/projects/addGoogleAnalytics) and
specifying the same `analyticsPropertyId`. For Android Apps and iOS Apps,
this call re-links data streams with their corresponding apps. However,
for Web Apps, this call provisions a &lt;em&gt;new&lt;/em&gt; data stream for each Web
App.
&lt;br&gt;
&lt;br&gt;To call `RemoveAnalytics`, a member must be an Owner for
the `FirebaseProject`.

Args:
  parent: string, The parent `FirebaseProject` to unlink from its Google Analytics account,
in the format:
&lt;br&gt;&lt;code&gt;projects/&lt;var&gt;PROJECT_NUMBER&lt;/var&gt;&lt;/code&gt; (required)
  body: object, The request body.
    The object takes the form of:

{
    &quot;analyticsPropertyId&quot;: &quot;A String&quot;, # Optional. The ID of the Google Analytics property associated with the
        # specified `FirebaseProject`.
        # &lt;ul&gt;
        # &lt;li&gt;If not set, then the Google Analytics property that is currently
        # associated with the specified `FirebaseProject` is removed.&lt;/li&gt;
        # &lt;li&gt;If set, and the specified `FirebaseProject` is currently associated
        # with a &lt;em&gt;different&lt;/em&gt; Google Analytics property, then the response is a
        # `412 Precondition Failed` error.&lt;/li&gt;
        # &lt;/ul&gt;
  }

  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="searchApps">searchApps(parent, pageSize=None, pageToken=None, x__xgafv=None)</code>
  <pre>A convenience method that lists all available Apps for the specified
FirebaseProject.
&lt;br&gt;
&lt;br&gt;Typically, interaction with an App should be done using the
platform-specific service, but some tool use-cases require a summary of all
known Apps (such as for App selector interfaces).

Args:
  parent: string, The parent Project for which to list Apps, in the format:
&lt;br&gt;&lt;code&gt;projects/&lt;var&gt;PROJECT_NUMBER&lt;/var&gt;&lt;/code&gt; (required)
  pageSize: integer, The maximum number of Apps to return in the response.
&lt;br&gt;
&lt;br&gt;The server may return fewer than this value at its discretion.
If no value is specified (or too large a value is specified), then the
server will impose its own limit.
&lt;br&gt;
&lt;br&gt;This value cannot be negative.
  pageToken: string, Token returned from a previous call to `SearchFirebaseApps` indicating
where in the set of Apps to resume listing.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    {
    &quot;nextPageToken&quot;: &quot;A String&quot;, # If the result list is too large to fit in a single response, then a token
        # is returned.
        # &lt;br&gt;
        # &lt;br&gt;This token can be used in a subsequent calls to `SearchFirebaseApps`
        # to find the next group of Apps.
        # &lt;br&gt;If the string is empty, then this response is the last page of results.
        # &lt;br&gt;Page tokens are short-lived and should not be persisted.
    &quot;apps&quot;: [ # One page of results from a call to `SearchFirebaseApps`.
      { # A high-level summary of an App.
        &quot;appId&quot;: &quot;A String&quot;, # Immutable. The globally unique, Firebase-assigned identifier of the App.
            # &lt;br&gt;
            # &lt;br&gt;This identifier should be treated as an opaque token, as the data
            # format is not specified.
        &quot;platform&quot;: &quot;A String&quot;, # The platform of the Firebase App.
        &quot;displayName&quot;: &quot;A String&quot;, # The user-assigned display name of the Firebase App.
        &quot;name&quot;: &quot;A String&quot;, # The fully qualified resource name of the Firebase App, in the format:
            # &lt;br&gt;&lt;code&gt;projects/&lt;var&gt;projectId&lt;/var&gt;/iosApps/&lt;var&gt;appId&lt;/var&gt;&lt;/code&gt;
            # or &lt;br&gt;&lt;code&gt;projects/&lt;var&gt;projectId&lt;/var&gt;/androidApps/&lt;var&gt;appId&lt;/var&gt;
            # &lt;/code&gt;
      },
    ],
  }</pre>
</div>

<div class="method">
    <code class="details" id="searchApps_next">searchApps_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 &#x27;execute()&#x27; on to request the next
  page. Returns None if there are no more items in the collection.
    </pre>
</div>

</body></html>