Migra a la API de Google Analytics Admin v1

Los canales Alfa y Beta de la API continúan siendo compatibles. El canal beta contiene un subconjunto de las funciones disponibles en la versión alfa que se consideran estables y no se espera que experimenten un cambio significativo en el futuro. Las nuevas funciones se agregarán a la versión beta cuando se desarrollen.

En este documento, se proporcionan instrucciones para migrar el código existente de la API de Google Analytics Management v3 a la API de Google Analytics Admin v1 y se proporciona una breve descripción general de las diferencias clave entre las dos APIs.

¿Por qué debo realizar la migración?

Si tu aplicación necesita crear o configurar una propiedad Google Analytics 4, debe usar la API de Admin v1. La API de Management v3 solo funciona con las propiedades Universal Analytics, y la API de Admin v1 solo funciona con las propiedades Google Analytics 4.

Requisitos previos

Para familiarizarte con los conceptos básicos de la versión 1 de la API de Admin, lee la guía de inicio rápido.

Comenzar

Para comenzar, prepararás una propiedad Google Analytics 4, habilitarás la versión 1 de la API de Admin y, luego, configurarás una biblioteca cliente de API adecuada para tu plataforma.

Prepara una propiedad Google Analytics 4

Antes de migrar tu código para que sea compatible con la API de Admin v1, debes migrar tu sitio web para usar una propiedad Google Analytics 4.

Habilita la API

Haz clic en este botón para habilitar automáticamente la API de Admin v1 en el proyecto de Google Cloud seleccionado.

Habilitar la API de Google Analytics Admin

Usa una biblioteca cliente

Instalar una biblioteca cliente

Si usas una biblioteca cliente, debes instalar la biblioteca cliente v1 de la API de Admin para tu lenguaje de programación.

Cómo inicializar una biblioteca cliente

Las bibliotecas cliente de la versión 1 de la API de Admin se diseñaron para que comiences con rapidez. Según la configuración predeterminada, las bibliotecas cliente intentan encontrar automáticamente las credenciales de tu cuenta de servicio.

Una manera fácil de proporcionar credenciales de cuenta de servicio es mediante la configuración de la variable de entorno GOOGLE_APPLICATION_CREDENTIALS. El cliente de la API usará el valor de esta variable para buscar el archivo JSON de la clave de la cuenta de servicio.

Por ejemplo, para configurar las credenciales de la cuenta de servicio, ejecuta el siguiente comando y usa la ruta de acceso al archivo JSON de la cuenta de servicio:

export GOOGLE_APPLICATION_CREDENTIALS="[PATH]"

A continuación, se muestran los fragmentos de código que se usan comúnmente para inicializar las bibliotecas cliente de la versión 1 de la API de Admin.

Java

    try (AnalyticsAdminServiceClient analyticsAdmin = AnalyticsAdminServiceClient.create()) {

Python

client = AlphaAnalyticsAdminClient()

.NET

AlphaAnalyticsAdminClient client = AlphaAnalyticsAdminClient.Create();

PHP

$client = new AlphaAnalyticsAdminClient();

Node.js

  // Imports the Google Analytics Data API client library.
  const {AlphaAnalyticsAdminClient} = require('@google-analytics/admin');

  // Using a default constructor instructs the client to use the credentials
  // specified in GOOGLE_APPLICATION_CREDENTIALS environment variable.
  const analyticsAdminClient = new AlphaAnalyticsAdminClient();

En lugar de usar una variable de entorno, también es posible pasar la información de credenciales a una instancia de cliente de API de forma explícita durante la inicialización.

Si no usas una biblioteca cliente

Si usas la API de Management v3 sin una biblioteca cliente y deseas continuar haciéndolo con la API de Admin v1, puedes usar tus credenciales.

Debes usar el nuevo documento de extremo HTTP y descubrimiento que proporciona la API de Admin:

Si tu código aprovecha un documento de descubrimiento, debes actualizarlo al documento de descubrimiento que proporciona la API de Admin v1:

Después de actualizar el extremo, deberás familiarizarte con la nueva estructura de solicitud y los conceptos de la API de Admin para actualizar tu consulta JSON.

Tareas comunes

Administrar cuentas

La API de Admin v1 proporciona un conjunto de métodos de administración de cuentas y propiedades de Google Analytics similares a la API de Management v3. Además, la API de Admin v1 presenta funciones para aprovisionar, borrar y actualizar las cuentas de Google Analytics.

  • Solo las propiedades Google Analytics 4 son compatibles con los métodos de administración de propiedades v1 de la API de Admin.

  • La noción de vistas (perfiles) no está presente en la versión 1 de la API de Admin.

  • Debido a que los flujos de datos se agregaron en Google Analytics 4, cierta información ya no está presente a nivel de la propiedad. Por ejemplo, el campo websiteUrl ahora está presente en la entidad DataStream en lugar de ser una parte del objeto de propiedad.

Enumerar resúmenes de la cuenta

El método accountSummaries de la API de Admin muestra resúmenes breves de todas las cuentas a las que puede acceder el llamador, de manera similar al método accountSummaries de la API de Management v3.

Una distinción importante es que la API de Admin v1 solo muestra información sobre las propiedades Google Analytics 4, mientras que las respuestas de la API de Management v3 contienen datos sobre las propiedades creadas con Universal Analytics. No es posible recuperar información sobre ambos tipos de propiedades con una sola llamada.

Debido a que no hay vistas (perfiles) en Google Analytics 4, los resúmenes de la cuenta que muestra la API de Admin no contienen información de vistas (perfil).

Los datos de resumen de la cuenta de Google Analytics 4 se limitan a los recursos y los nombres visibles de las cuentas o propiedades disponibles para el usuario actual.

Usa los nombres de recursos que se muestran en los campos account y property de la respuesta de los resúmenes para recuperar los datos de configuración completos mediante una llamada a los métodos account.get y property.get.

Solicitud de la versión 1 de la API de Admin

GET https://analyticsadmin.googleapis.com/v1beta/accountSummaries?key=[YOUR_API_KEY]

Respuesta de la API de Admin v1

{
  "accountSummaries": [
    {
      "name": "accountSummaries/XXXXXX",
      "account": "accounts/XXXXXX",
      "displayName": "Test",
      "propertySummaries": [
        {
          "property": "properties/XXXXXX",
          "displayName": "Test App"
        }
      ]
    },
    ...
}

Solicitud a la API de Management v3

GET https://analytics.googleapis.com/analytics/v3/management/accountSummaries?key=[YOUR_API_KEY]

Respuesta de la API de Management v3

{
  "kind": "analytics#accountSummaries",
  "username": "XXXXXX",
  "totalResults": 9,
  "startIndex": 1,
  "itemsPerPage": 1000,
  "items": [
    {
      "id": "XXXXXX",
      "kind": "analytics#accountSummary",
      "name": "Test Account",
      "webProperties": [
        {
          "kind": "analytics#webPropertySummary",
          "id": "UA-XXXXXX",
          "name": "Test Property",
          "internalWebPropertyId": "XXXXXX",
          "level": "STANDARD",
          "websiteUrl": "XXXXXX",
          "profiles": [
            {
              "kind": "analytics#profileSummary",
              "id": "XXXXXX",
              "name": "Test Profile",
              "type": "WEB"
            }
          ]
        },
        ...
}

Código de muestra para llamar a la API de Admin v1 con bibliotecas cliente:

Python

from google.analytics.admin import AnalyticsAdminServiceClient


def list_account_summaries(transport: str = None) -> None:
    """
    Prints summaries of all accounts accessible by the caller.

    Args:
        transport(str): The transport to use. For example, "grpc"
            or "rest". If set to None, a transport is chosen automatically.
    """
    client = AnalyticsAdminServiceClient(transport=transport)
    results = client.list_account_summaries()

    print("Result:")
    for account_summary in results:
        print("-- Account --")
        print(f"Resource name: {account_summary.name}")
        print(f"Account name: {account_summary.account}")
        print(f"Display name: {account_summary.display_name}")
        print()
        for property_summary in account_summary.property_summaries:
            print("-- Property --")
            print(f"Property resource name: {property_summary.property}")
            print(f"Property display name: {property_summary.display_name}")
            print()


Mostrar cuentas

El método accounts.list de la versión 1 de la API de Admin muestra todas las cuentas a las que puede acceder el llamador, de manera similar al método accounts.list de la API de Management v3.

Solicitud de la versión 1 de la API de Admin

GET https://analyticsadmin.googleapis.com/v1beta/accounts?key=[YOUR_API_KEY]

Respuesta de la API de Admin v1

{
  "accounts": [
    {
      "name": "accounts/XXXXXX",
      "createTime": "2020-02-21T00:17:33.282Z",
      "updateTime": "2021-01-07T02:47:57.386Z",
      "displayName": "Test Account",
      "regionCode": "US"
    },
  ...
}

Solicitud a la API de Management v3

GET https://analytics.googleapis.com/analytics/v3/management/accounts?key=[YOUR_API_KEY]

Respuesta de la API de Management v3

{
  "kind": "analytics#accounts",
  "username": "XXXXXX",
  "totalResults": 9,
  "startIndex": 1,
  "itemsPerPage": 1000,
  "items": [
    {
      "id": "XXXXXX",
      "kind": "analytics#account",
      "selfLink": "https://www.googleapis.com/analytics/v3/management/accounts/XXXXXX",
      "name": "Test Account",
      "permissions": {
        "effective": [
          "COLLABORATE",
          "EDIT",
          "READ_AND_ANALYZE"
        ]
      },
      "created": "2020-02-21T00:17:33.282Z",
      "updated": "2021-01-07T02:47:57.386Z",
      "childLink": {
        "type": "analytics#webproperties",
        "href": "https://www.googleapis.com/analytics/v3/management/accounts/XXXXXX/webproperties"
      }
    },
    ...
}

Ten en cuenta que la respuesta v1 de la API de Admin no incluye información sobre los permisos efectivos del usuario ni el campo childLink que estaba presente en la API de Management v3.

Código de muestra para llamar a la API de Admin v1 con bibliotecas cliente:

Python

from google.analytics.admin import AnalyticsAdminServiceClient

from accounts_get import print_account


def list_accounts(transport: str = None):
    """
    Lists the Google Analytics accounts available to the current user.

    Args:
        transport(str): The transport to use. For example, "grpc"
            or "rest". If set to None, a transport is chosen automatically.
    """
    client = AnalyticsAdminServiceClient(transport=transport)
    results = client.list_accounts()

    print("Result:")
    for account in results:
        print_account(account)


Administrar propiedades

Enumerar propiedades

El método properties.list de la versión 1 de la API de Admin muestra todas las propiedades Google Analytics 4 a las que puede acceder el llamador, de manera similar al método webproperties.list de la API de Management v3, que devuelve todas las propiedades Universal Analytics accesibles.

Dado que el campo websiteUrl ya no está presente a nivel de la propiedad en Google Analytics 4, usa properties.dataStreams/list para enumerar todos los flujos de datos asociados con la propiedad y busca el campo defaultUri para recuperar la URL del sitio web asociada con un flujo.

Ten en cuenta el parámetro filter en la URL de la solicitud properties.list. El valor del parámetro contiene una expresión para filtrar los resultados de la solicitud y se puede usar para enumerar las propiedades asociadas con un ID de cuenta de Google Analytics determinado o con el proyecto de Firebase vinculado.

Solicitud de la versión 1 de la API de Admin

GET https://analyticsadmin.googleapis.com/v1beta/properties?filter=parent:accounts/XXXXXX&key=[YOUR_API_KEY]

Respuesta de la API de Admin v1

{
  "properties": [
    {
      "name": "properties/XXXXXX",
      "parent": "accounts/XXXXXX",
      "createTime": "2020-10-29T04:02:49.124Z",
      "updateTime": "2020-10-29T04:02:49.124Z",
      "displayName": "Test Property",
      "timeZone": "America/Los_Angeles",
      "currencyCode": "USD"
    },
    ...
}

Solicitud a la API de Management v3

GET https://analytics.googleapis.com/analytics/v3/management/accounts/XXXXXX/webproperties?key=[YOUR_API_KEY]

Respuesta de la API de Management v3

{
  "kind": "analytics#webproperties",
  "username": "XXXXXX",
  "totalResults": 33,
  "startIndex": 1,
  "itemsPerPage": 1000,
  "items": [
    {
      "id": "UA-XXXXXX-1",
      "kind": "analytics#webproperty",
      "selfLink": "https://www.googleapis.com/analytics/v3/management/accounts/XXXXXX/webproperties/UA-XXXXXX-1",
      "accountId": "XXXXXX",
      "internalWebPropertyId": "XXXXXX",
      "name": "Test Account",
      "websiteUrl": "XXXXXX",
      "level": "PREMIUM",
      "profileCount": 4,
      "industryVertical": "HEALTH",
      "defaultProfileId": "XXXXXX",
      "dataRetentionTtl": "INDEFINITE",
      "dataRetentionResetOnNewActivity": true,
      "permissions": {
        "effective": [
          "COLLABORATE",
          "EDIT",
          "READ_AND_ANALYZE"
        ]
      },
      "created": "2020-02-21T00:28:47.287Z",
      "updated": "2021-01-27T21:39:22.704Z",
      "parentLink": {
        "type": "analytics#account",
        "href": "https://www.googleapis.com/analytics/v3/management/accounts/XXXXXX"
      },
      "childLink": {
        "type": "analytics#profiles",
        "href": "https://www.googleapis.com/analytics/v3/management/accounts/XXXXXX/webproperties/UA-XXXXXX-1/profiles"
      }
    },
    ...
}

Código de muestra para llamar a la API de Admin v1 con bibliotecas cliente:

Python

from google.analytics.admin import AnalyticsAdminServiceClient
from google.analytics.admin_v1alpha.types import ListPropertiesRequest


def run_sample():
    """Runs the sample."""
    # TODO(developer): Replace this variable with your Google Analytics
    #  account ID (e.g. "123456") before running the sample.
    account_id = "YOUR-GA-ACCOUNT-ID"
    list_properties(account_id)


def list_properties(account_id: str, transport: str = None):
    """
    Lists Google Analytics 4 properties under the specified parent account
    that are available to the current user.

    Args:
        account_id(str): The Google Analytics account ID.
        transport(str): The transport to use. For example, "grpc"
            or "rest". If set to None, a transport is chosen automatically.
    """
    client = AnalyticsAdminServiceClient(transport=transport)
    results = client.list_properties(
        ListPropertiesRequest(filter=f"parent:accounts/{account_id}", show_deleted=True)
    )

    print("Result:")
    for property_ in results:
        print(property_)
        print()


Obtener propiedad

El método properties.get de la API de Admin v1 muestra la información sobre una propiedad Google Analytics 4, similar al método webproperties.get de la API de Management v3.

Ten en cuenta que el método properties.get de la API de Admin solo admite propiedades Google Analytics 4.

Solicitud de la versión 1 de la API de Admin

GET https://analyticsadmin.googleapis.com/v1beta/properties/XXXXXX?key=[YOUR_API_KEY]

Respuesta de la API de Admin v1

{
  "name": "properties/XXXXXX",
  "parent": "accounts/XXXXXX",
  "createTime": "2021-04-30T21:32:49.804Z",
  "updateTime": "2021-04-30T21:32:49.804Z",
  "displayName": "Test Property",
  "industryCategory": "FINANCE",
  "timeZone": "America/Los_Angeles",
  "currencyCode": "USD"
}

Solicitud a la API de Management v3

GET https://analytics.googleapis.com/analytics/v3/management/accounts/XXXXXX/webproperties/UA-XXXXXX-3?key=[YOUR_API_KEY]

Respuesta de la API de Management v3

{
  "id": "UA-XXXXXX-3",
  "kind": "analytics#webproperty",
  "selfLink": "https://www.googleapis.com/analytics/v3/management/accounts/XXXXXX/webproperties/UA-XXXXXX-3",
  "accountId": "XXXXXX",
  "internalWebPropertyId": "XXXXXX",
  "name": "Test 2",
  "websiteUrl": "YOUR-WEBSITE-URL",
  "level": "STANDARD",
  "profileCount": 0,
  "industryVertical": "FINANCE",
  "dataRetentionTtl": "MONTHS_26",
  "dataRetentionResetOnNewActivity": true,
  "permissions": {
    "effective": [
      "COLLABORATE",
      "EDIT",
      "MANAGE_USERS",
      "READ_AND_ANALYZE"
    ]
  },
  "created": "2021-05-20T05:35:51.985Z",
  "updated": "2021-05-20T05:41:39.219Z",
  "parentLink": {
    "type": "analytics#account",
    "href": "https://www.googleapis.com/analytics/v3/management/accounts/XXXXXX"
  },
  "childLink": {
    "type": "analytics#profiles",
    "href": "https://www.googleapis.com/analytics/v3/management/accounts/XXXXXX/webproperties/UA-XXXXXX-3/profiles"
  }
}

Código de muestra para llamar a la API de Admin v1 con bibliotecas cliente:

Python

from google.analytics.admin import AnalyticsAdminServiceClient
from google.analytics.admin_v1alpha.types import IndustryCategory


def run_sample():
    """Runs the sample."""
    # TODO(developer): Replace this variable with your Google Analytics 4
    #  property ID (e.g. "123456") before running the sample.
    property_id = "YOUR-GA4-PROPERTY-ID"
    get_property(property_id)


def get_property(property_id: str, transport: str = None):
    """
    Retrieves the Google Analytics 4 property details.

    Args:
        property_id(str): The Google Analytics Property ID.
        transport(str): The transport to use. For example, "grpc"
            or "rest". If set to None, a transport is chosen automatically.
    """
    client = AnalyticsAdminServiceClient(transport=transport)
    property_ = client.get_property(name=f"properties/{property_id}")

    print("Result:")
    print_property(property_)


def print_property(property):
    """Prints the Google Analytics 4 property details."""
    print(f"Resource name: {property.name}")
    print(f"Parent: {property.parent}")
    print(f"Display name: {property.display_name}")
    print(f"Create time: {property.create_time}")
    print(f"Update time: {property.update_time}")
    # print(f"Delete time: {property.delete_time}")
    # print(f"Expire time: {property.expire_time}")

    if property.industry_category:
        print(f"Industry category: {IndustryCategory(property.industry_category).name}")

    print(f"Time zone: {property.time_zone}")
    print(f"Currency code: {property.currency_code}")


Crear propiedad

El método properties.create de la API de Admin v1 crea una nueva propiedad Google Analytics 4, similar al método webproperties.insert de la API de Management v3.

Solicitud de la versión 1 de la API de Admin

POST https://analyticsadmin.googleapis.com/v1beta/properties?key=[YOUR_API_KEY]

{
  "displayName": "Test Property",
  "industryCategory": "AUTOMOTIVE",
  "currencyCode": "USD",
  "timeZone": "America/Los_Angeles",
  "parent": "accounts/XXXXXX"
}

Respuesta de la API de Admin v1

{
  "name": "properties/XXXXXX",
  "parent": "accounts/XXXXXX",
  "createTime": "2021-05-20T09:16:08.458Z",
  "updateTime": "2021-05-20T09:16:08.458Z",
  "displayName": "Test Property",
  "industryCategory": "AUTOMOTIVE",
  "timeZone": "America/Los_Angeles",
  "currencyCode": "USD"
}

Solicitud a la API de Management v3

POST https://analytics.googleapis.com/analytics/v3/management/accounts/XXXXXX/webproperties?key=[YOUR_API_KEY]

{
  "name": "Test",
  "websiteUrl": "YOUR-WEBSITE-URL"
}

Respuesta de la API de Management v3

{
  "id": "UA-XXXXXX-3",
  "kind": "analytics#webproperty",
  "selfLink": "https://www.googleapis.com/analytics/v3/management/accounts/XXXXXX/webproperties/UA-XXXXXX-3",
  "accountId": "XXXXXX",
  "internalWebPropertyId": "XXXXXX",
  "name": "Test",
  "websiteUrl": "YOUR-WEBSITE-URL",
  "level": "STANDARD",
  "profileCount": 0,
  "dataRetentionTtl": "MONTHS_26",
  "dataRetentionResetOnNewActivity": true,
  "permissions": {
    "effective": [
      "COLLABORATE",
      "EDIT",
      "MANAGE_USERS",
      "READ_AND_ANALYZE"
    ]
  },
  "created": "2021-05-20T05:35:51.985Z",
  "updated": "2021-05-20T05:35:51.985Z",
  "parentLink": {
    "type": "analytics#account",
    "href": "https://www.googleapis.com/analytics/v3/management/accounts/XXXXXX"
  },
  "childLink": {
    "type": "analytics#profiles",
    "href": "https://www.googleapis.com/analytics/v3/management/accounts/XXXXXX/webproperties/UA-XXXXXX-3/profiles"
  }
}

Código de muestra para llamar a la API de Admin v1 con bibliotecas cliente:

Python

from google.analytics.admin import AnalyticsAdminServiceClient
from google.analytics.admin_v1alpha.types import Property


def run_sample():
    """Runs the sample."""

    # !!! ATTENTION !!!
    #  Running this sample may change/delete your Google Analytics account
    #  configuration. Make sure to not use the Google Analytics account ID from
    #  your production environment below.

    # TODO(developer): Replace this variable with your Google Analytics
    #  account ID (e.g. "123456") before running the sample.
    account_id = "YOUR-GA-ACCOUNT-ID"
    create_property(account_id)


def create_property(account_id: str, transport: str = None):
    """
    Creates a Google Analytics 4 property.

    Args:
        account_id(str): The Google Analytics Account ID.
        transport(str): The transport to use. For example, "grpc"
            or "rest". If set to None, a transport is chosen automatically.
    """
    client = AnalyticsAdminServiceClient(transport=transport)
    property_ = client.create_property(
        property=Property(
            parent=f"accounts/{account_id}",
            currency_code="USD",
            display_name="Test property",
            industry_category="OTHER",
            time_zone="America/Los_Angeles",
        )
    )

    print("Result:")
    print(property_)


Actualizar o aplicar parches a una propiedad

El método properties.patch de la versión 1 de la API de Admin actualiza la configuración de una propiedad Google Analytics 4, de manera similar al método webproperties.patch de la API de Management v3.

Ten en cuenta el parámetro updateMask en la URL de la solicitud, que contiene la lista de campos separados por comas que se actualizarán. No se actualizarán los campos que no estén presentes en esta lista. Si usas una biblioteca cliente, el parámetro update_mask estará disponible como parte de la firma del método.

Solicitud de la versión 1 de la API de Admin

PATCH https://analyticsadmin.googleapis.com/v1beta/properties/XXXXXX?updateMask=displayName,industryCategory&key=[YOUR_API_KEY]

{
  "displayName": "New Property Name",
  "industryCategory": "FINANCE"
}

Respuesta de la API de Admin v1

{
  "name": "properties/XXXXXX",
  "parent": "accounts/XXXXXX",
  "createTime": "2021-04-30T21:32:49.804Z",
  "updateTime": "2021-05-20T09:25:14.810Z",
  "displayName": "New Property Name",
  "industryCategory": "FINANCE",
  "timeZone": "America/Los_Angeles",
  "currencyCode": "USD"
}

Solicitud a la API de Management v3

PATCH https://analytics.googleapis.com/analytics/v3/management/accounts/XXXXXX/webproperties/UA-XXXXXX-3?key=[YOUR_API_KEY]

{
  "name": "New Property Name",
  "industryVertical": "FINANCE"
}

Respuesta de la API de Management v3

{
  "id": "UA-XXXXXX-3",
  "kind": "analytics#webproperty",
  "selfLink": "https://www.googleapis.com/analytics/v3/management/accounts/XXXXXX/webproperties/UA-XXXXXX-3",
  "accountId": "XXXXXX",
  "internalWebPropertyId": "XXXXXX",
  "name": "New Property Name",
  "websiteUrl": "XXXXXX",
  "level": "STANDARD",
  "profileCount": 0,
  "industryVertical": "FINANCE",
  "dataRetentionTtl": "MONTHS_26",
  "dataRetentionResetOnNewActivity": true,
  "permissions": {
    "effective": [
      "COLLABORATE",
      "EDIT",
      "MANAGE_USERS",
      "READ_AND_ANALYZE"
    ]
  },
  "created": "2021-05-20T05:35:51.985Z",
  "updated": "2021-05-20T05:41:39.219Z",
  "parentLink": {
    "type": "analytics#account",
    "href": "https://www.googleapis.com/analytics/v3/management/accounts/XXXXXX"
  },
  "childLink": {
    "type": "analytics#profiles",
    "href": "https://www.googleapis.com/analytics/v3/management/accounts/XXXXXX/webproperties/UA-XXXXXX-3/profiles"
  }
}

Código de muestra para llamar a la API de Admin v1 con bibliotecas cliente:

Python

from google.analytics.admin import AnalyticsAdminServiceClient
from google.analytics.admin_v1alpha.types import Property
from google.protobuf.field_mask_pb2 import FieldMask


def run_sample():
    """Runs the sample."""

    # !!! ATTENTION !!!
    #  Running this sample may change/delete your Google Analytics account
    #  configuration. Make sure to not use the Google Analytics property ID from
    #  your production environment below.

    # TODO(developer): Replace this variable with your Google Analytics 4
    #  property ID (e.g. "123456") before running the sample.
    property_id = "YOUR-GA4-PROPERTY-ID"
    update_property(property_id)


def update_property(property_id: str, transport: str = None):
    """
    Updates the Google Analytics 4 property.

    Args:
        property_id(str): The Google Analytics Property ID.
        transport(str): The transport to use. For example, "grpc"
            or "rest". If set to None, a transport is chosen automatically.
    """
    client = AnalyticsAdminServiceClient(transport=transport)
    # This call updates the display name, industry category and time zone of the
    # property, as indicated by the value of the `update_mask` field.
    # The property to update is specified in the `name` field of the `Property`
    # instance.
    property_ = client.update_property(
        property=Property(
            name=f"properties/{property_id}",
            display_name="This is an updated test property",
            industry_category="GAMES",
            time_zone="America/New_York",
        ),
        update_mask=FieldMask(paths=["display_name", "time_zone", "industry_category"]),
    )

    print("Result:")
    print(property_)


Administración de usuarios

En la actualidad, la API de Administrador de Google Analytics implementa un modelo de permisos del usuario similar a la API de Management v3, pero con algunas diferencias.

  1. Puedes administrar los permisos del usuario con la API de Google Analytics Admin mediante los recursos de cuenta AccessBinding y propiedad AccessBinding, en lugar de los recursos AccountUserLink, WebPropertyUserLink y ProfileUserLink en la versión 3 de la API de Management.
  2. Las vinculaciones de acceso a la propiedad en la API de Google Analytics Admin no incluyen permisos implícitos ni permisos heredados de las vinculaciones de acceso a la cuenta. En la API de Management v3, cada vínculo de usuario contenía una colección permissions.effective que incluía permisos implícitos y heredados.

Una entidad AccessBinding contiene un usuario (dirección de correo electrónico) y una lista de funciones otorgadas al usuario. Se puede crear, actualizar o borrar una entidad AccessBinding.

La asignación entre los nombres de las funciones v1 de la API de Admin y los nombres de permisos de la API de Management v3 es la siguiente:

Rol de API de Admin v1 Nombre del permiso de la API de Management v3
predefinidoRoles/viewer READ_AND_ANALYZE
roles predefinidos/analista COLABORACIÓN
predefinidoRoles/editor EDITAR
predefinidosRoles/administrador MANAGE_USERS

Las funciones predefinedRoles/no-cost-data y predefinedRoles/no-revenue-data se introdujeron en la API de Admin v1 y no tienen una asignación correspondiente en la API de Management v3.

En esta guía, se muestra cómo administrar las vinculaciones de acceso a nivel de la cuenta. Para administrar las vinculaciones de acceso a nivel de la propiedad, sigue el mismo proceso, pero usa los recursos y métodos de la propiedad AccessBinding en lugar de la cuenta AccessBinding.

Enumerar vinculaciones de acceso a cuentas

El método accounts.accessBindings.list de la versión 1 de la API de Admin enumera todas las vinculaciones de acceso en una cuenta, de manera similar al método accountUserLinks.list de la API de Management v3.

Solicitud de la versión 1 de la API de Admin

GET https://analyticsadmin.googleapis.com/v1alpha/accounts/XXXXXX/accessBindings/XXXXXXXX

Respuesta de la API de Admin v1

{
  "accessBindings": [
    {
      "name": "accounts/XXXXXX/accessBindings/XXXXXX",
      "user": "XXXXXX",
      "roles": [
        "predefinedRoles/editor",
        "predefinedRoles/admin"
      ]
    }
  ]
}

Solicitud a la API de Management v3

GET https://analytics.googleapis.com/analytics/v3/management/accounts/XXXXXX/entityUserLinks?key=[YOUR_API_KEY]

Respuesta de la API de Management v3

{
  "kind": "analytics#entityUserLinks",
  "totalResults": 1,
  "startIndex": 1,
  "itemsPerPage": 1000,
  "items": [
    {
      "id": "XXXXXX:XXXXXX",
      "kind": "analytics#entityUserLink",
      "selfLink": "https://www.googleapis.com/analytics/v3/management/accounts/XXXXXX/entityUserLinks/XXXXXX:XXXXXX",
      "entity": {
        "accountRef": {
          "id": "XXXXXX",
          "kind": "analytics#accountRef",
          "href": "https://www.googleapis.com/analytics/v3/management/accounts/XXXXXX",
          "name": "This is a test account"
        }
      },
      "userRef": {
        "kind": "analytics#userRef",
        "id": "XXXXXX",
        "email": "XXXXXX"
      },
      "permissions": {
        "effective": [
          "COLLABORATE",
          "EDIT",
          "MANAGE_USERS",
          "READ_AND_ANALYZE"
        ],
        "local": [
          "EDIT",
          "MANAGE_USERS"
        ]
      }
    }
  ]
}

Código de muestra para llamar a la API de Admin con bibliotecas cliente:

Python

from google.analytics.admin import AnalyticsAdminServiceClient


def run_sample():
    """Runs the sample."""
    # TODO(developer): Replace this variable with your Google Analytics
    #  account ID (e.g. "123456") before running the sample.
    account_id = "YOUR-GA-ACCOUNT-ID"
    list_account_access_bindings(account_id)


def list_account_access_bindings(account_id: str, transport: str = None):
    """
    Lists access bindings under the specified parent account.

    Args:
        account_id(str): The id of the account.
        transport(str): The transport to use. For example, "grpc"
            or "rest". If set to None, a transport is chosen automatically.
    """
    client = AnalyticsAdminServiceClient(transport=transport)
    results = client.list_access_bindings(parent=f"accounts/{account_id}")

    print("Result:")
    for access_binding in results:
        print(access_binding)
        print()


Actualizar vinculaciones de acceso a cuentas

El método accounts.accessBindings.patch de la API de Admin v1 actualiza una vinculación de acceso de una cuenta, de manera similar al método accountUserLinks.update de la API de Management v3.

Solicitud de la versión 1 de la API de Admin

PATCH https://analyticsadmin.googleapis.com/v1alpha/accounts/XXXXXX/accessBindings/XXXXXXXX

{
  "roles": [
    "predefinedRoles/editor",
    "predefinedRoles/admin"
  ]
}

Respuesta de la API de Admin v1

{
  "name": "accounts/XXXXXX/accessBindings/XXXXXXXX",
  "user": "USER-EMAIL",
  "directRoles": [
    "predefinedRoles/editor",
    "predefinedRoles/admin"
  ]
}

Solicitud a la API de Management v3

PUT https://analytics.googleapis.com/analytics/v3/management/accounts/XXXXXX/entityUserLinks/XXXXXX%3A104236685715552897132?key=[YOUR_API_KEY]

{
  "entity": {
    "accountRef": {
      "id": "XXXXXX"
    }
  },
  "userRef": {
    "email": "XXXXXX"
  },
  "permissions": {
    "local": [
      "EDIT",
      "MANAGE_USERS"
    ]
  }
}

Respuesta de la API de Management v3

{
  "id": "XXXXXX:104236685715552897132",
  "kind": "analytics#entityUserLink",
  "selfLink": "https://www.googleapis.com/analytics/v3/management/accounts/XXXXXX/entityUserLinks/XXXXXX:104236685715552897132",
  "entity": {
    "accountRef": {
      "id": "XXXXXX",
      "kind": "analytics#accountRef",
      "href": "https://www.googleapis.com/analytics/v3/management/accounts/XXXXXX",
      "name": "This is a test account"
    }
  },
  "userRef": {
    "kind": "analytics#userRef",
    "id": "104236685715552897132",
    "email": "XXXXXX"
  },
  "permissions": {
    "effective": [
      "COLLABORATE",
      "EDIT",
      "MANAGE_USERS",
      "READ_AND_ANALYZE"
    ],
    "local": [
      "EDIT",
      "MANAGE_USERS"
    ]
  }
}

Código de muestra para llamar a la API de Admin v1 con bibliotecas cliente:

Python

from google.analytics.admin import AnalyticsAdminServiceClient
from google.analytics.admin_v1alpha.types import AccessBinding


def run_sample():
    """Runs the sample."""

    # !!! ATTENTION !!!
    #  Running this sample may change/delete your Google Analytics account
    #  configuration. Make sure to not use the Google Analytics property ID from
    #  your production environment below.

    # TODO(developer): Replace this variable with your Google Analytics
    #  account ID (e.g. "123456") before running the sample.
    account_id = "YOUR-GA-ACCOUNT-ID"

    # TODO(developer): Replace this variable with your Google Analytics
    #  account access binding ID (e.g. "123456") before running the sample.
    account_access_binding_id = "YOUR-ACCOUNT-ACCESS-BINDING-ID"

    update_account_access_binding(account_id, account_access_binding_id)


def update_account_access_binding(
    account_id: str, account_access_binding_id: str, transport: str = None
):
    """
    Updates the account access binding.

    Args:
        account_id(str): The Google Analytics Account ID.
        account_access_binding_id(str): Google Analytics account access binding ID.
        transport(str): The transport to use. For example, "grpc"
            or "rest". If set to None, a transport is chosen automatically.
    """
    client = AnalyticsAdminServiceClient(transport=transport)
    # This call updates the roles of the access binding. The access binding to
    # update is specified in the `name` field of the `AccessBinding` instance.
    access_binding = client.update_access_binding(
        access_binding=AccessBinding(
            name=f"accounts/{account_id}/accessBindings/{account_access_binding_id}",
            roles=["predefinedRoles/collaborate"],
        ),
    )

    print("Result:")
    print(access_binding)


Cómo crear vinculaciones de acceso a cuentas

El método accounts.accessBindings.create de la API de Admin v1 crea una vinculación de acceso en una cuenta, similar al método accountUserLinks.insert de la API de Management v3.

Solicitud de la versión 1 de la API de Admin

POST https://analyticsadmin.googleapis.com/v1alpha/accounts/XXXXXX/accessBindings

{
  "roles": [
    "predefinedRoles/editor",
    "predefinedRoles/admin"
  ],
  "user": "USER-EMAIL"
}

Respuesta de la API de Admin v1

{
  "name": "accounts/XXXXXX/accessBindings/XXXXXXXX",
  "user": "USER-EMAIL",
  "roles": [
    "predefinedRoles/editor",
    "predefinedRoles/admin"
  ]
}

Solicitud a la API de Management v3

POST https://analytics.googleapis.com/analytics/v3/management/accounts/XXXXXX/entityUserLinks?key=[YOUR_API_KEY]

{
  "entity": {
    "accountRef": {
      "id": "XXXXXX"
    }
  },
  "userRef": {
    "email": "XXXXXX"
  },
  "permissions": {
    "local": [
      "EDIT",
      "MANAGE_USERS"
    ]
  }
}

Respuesta de la API de Management v3

{
  "id": "XXXXXX:114236685715552897132",
  "kind": "analytics#entityUserLink",
  "selfLink": "https://www.googleapis.com/analytics/v3/management/accounts/XXXXXX/entityUserLinks/XXXXXX:114236685715552897132",
  "entity": {
    "accountRef": {
      "id": "XXXXXX",
      "kind": "analytics#accountRef",
      "href": "https://www.googleapis.com/analytics/v3/management/accounts/XXXXXX",
      "name": "This is a test account"
    }
  },
  "userRef": {
    "kind": "analytics#userRef",
    "id": "114236685715552897132",
    "email": "XXXXXX"
  },
  "permissions": {
    "effective": [
      "COLLABORATE",
      "EDIT",
      "MANAGE_USERS",
      "READ_AND_ANALYZE"
    ],
    "local": [
      "EDIT",
      "MANAGE_USERS"
    ]
  }
}

Código de muestra para llamar a la API de Admin v1 con bibliotecas cliente:

Python

from google.analytics.admin import AnalyticsAdminServiceClient
from google.analytics.admin_v1alpha.types import (
    AccessBinding,
    CreateAccessBindingRequest,
)


def run_sample():
    """Runs the sample."""

    # !!! ATTENTION !!!
    #  Running this sample may change/delete your Google Analytics account
    #  configuration. Make sure to not use the Google Analytics account ID from
    #  your production environment below.

    # TODO(developer): Replace this variable with your Google Analytics
    #  account ID (e.g. "123456") before running the sample.
    account_id = "YOUR-GA-ACCOUNT-ID"

    # TODO(developer): Replace this variable with an email address of the user to
    #  link. This user will be given access to your account after running the
    #  sample.
    email_address = "TEST-EMAIL-ADDRESS"

    create_account_access_binding(account_id, email_address)


def create_account_access_binding(
    account_id: str, email_address: str, transport: str = None
):
    """
    Creates a access binding for the account.

    Args:
        account_id(str): The Google Analytics Account ID.
        email_address(str): Email address of the access binding user.
        transport(str): The transport to use. For example, "grpc"
            or "rest". If set to None, a transport is chosen automatically.
    """
    client = AnalyticsAdminServiceClient(transport=transport)
    access_binding = client.create_access_binding(
        CreateAccessBindingRequest(
            parent=f"accounts/{account_id}",
            access_binding=AccessBinding(
                user=email_address, roles=["predefinedRoles/read"]
            ),
        )
    )

    print("Result:")
    print(access_binding)


Agrupación en lotes

La API de Admin v1 no admite el procesamiento por lotes de varias llamadas a la API de Google Analytics con el tipo de contenido multiparte o mixto, a diferencia de la API de Management v3.

En cambio, el procesamiento por lotes se admite explícitamente en el nivel de la API. Los siguientes métodos de la API de Admin v1 admiten la funcionalidad de lotes:

Código de muestra para llamar a la API de Admin v1 con bibliotecas cliente:

Python

from google.analytics.admin import AnalyticsAdminServiceClient
from google.analytics.admin_v1alpha.types import (
    AccessBinding,
    BatchCreateAccessBindingsRequest,
    CreateAccessBindingRequest,
)


def run_sample():
    """Runs the sample."""

    # !!! ATTENTION !!!
    #  Running this sample may change/delete your Google Analytics account
    #  configuration. Make sure to not use the Google Analytics account ID from
    #  your production environment below.

    # TODO(developer): Replace this variable with your Google Analytics
    #  account ID (e.g. "123456") before running the sample.
    account_id = "YOUR-GA-ACCOUNT-ID"

    # TODO(developer): Replace this variable with an email address of the user to
    #  link. This user will be given access to your account after running the
    #  sample.
    email_address = "TEST-EMAIL-ADDRESS"

    batch_create_account_access_binding(account_id, email_address)


def batch_create_account_access_binding(
    account_id: str, email_address: str, transport: str = None
):
    """
    Creates a access binding for the account using a batch call.

    Args:
        account_id(str): The Google Analytics Account ID.
        email_address(str): Email address of the access binding user.
        transport(str): The transport to use. For example, "grpc"
            or "rest". If set to None, a transport is chosen automatically.
    """
    client = AnalyticsAdminServiceClient(transport=transport)
    response = client.batch_create_access_bindings(
        BatchCreateAccessBindingsRequest(
            parent=f"accounts/{account_id}",
            requests=[
                CreateAccessBindingRequest(
                    access_binding=AccessBinding(
                        user=email_address,
                        roles=["predefinedRoles/read"],
                    )
                )
            ],
        )
    )

    print("Result:")
    for access_binding in response.access_bindings:
        print(access_binding)
        print()


Cambios en la cuota de la API

La API de Admin v1 presenta cuotas menos restrictivas en comparación con la API de Management v3.

  • Según la configuración predeterminada, la cantidad de solicitudes a la API de Administrador v1 está limitada a 600 solicitudes por minuto para un proyecto de GCP.
  • En la actualidad, no hay una cuota límite diaria para la cantidad de llamadas a la API de Admin v1 por proyecto de GCP. Ten en cuenta que la cantidad máxima teórica de solicitudes por día sigue limitada por la cuota de solicitudes por minuto.
  • Se quitó un límite independiente para la cantidad de operaciones de escritura por día.