Agrega notificaciones para desarrolladores en tiempo real

Descripción general

La Facturación Google Play ofrece notificaciones push del servidor que te permiten supervisar los cambios de estado de las suscripciones administradas por Play y de las compras únicas con transacciones pendientes. Si habilitas las notificaciones en tiempo real para desarrolladores, recibirás un token de compra directamente desde Cloud Pub/Sub siempre que haya una actualización de una transacción pendiente o existente.

Las notificaciones en tiempo real para desarrolladores no proporcionan toda la información sobre el estado de la suscripción, como si el usuario tiene acceso al contenido de la suscripción en la actualidad. Cuando recibes el token, siempre debes usar el token de compra para consultar la API de desarrolladores de Google Play y obtener toda la información, además de actualizar tu backend con el estado de autorización actual del usuario.

Es posible que los tipos de notificación cambien en el futuro. Deberías poder administrar los tipos de notificación no reconocidos y siempre confiar en la API para desarrolladores de Google Play para tomar las decisiones principales de lógica empresarial.

Para habilitar esta función, haz lo siguiente:

  1. Configura Cloud Pub/Sub con tu propio proyecto de Google Cloud Platform (GCP).
  2. Habilita las notificaciones para desarrolladores en tiempo real en tu app de Android.

Configura Cloud Pub/Sub

Cloud Pub/Sub es un servicio de mensajería en tiempo real completamente administrado que te permite enviar y recibir mensajes entre aplicaciones independientes. Además, proporciona mensajes duraderos y de baja latencia que te ayudan a integrar de manera rápida los sistemas alojados en Google Cloud Platform y en servicios externos.

La Facturación Google Play usa Cloud Pub/Sub para publicar notificaciones push sobre temas a los que te suscribes.

Establece requisitos previos

Para usar Cloud Pub/Sub, debes tener un proyecto en Google Cloud Platform (GCP) con la API de Cloud Pub/Sub habilitada. Si no estás familiarizado con GCP ni Cloud Pub/Sub, lee la Guía de inicio rápido.

Para recibir notificaciones push, debes crear un servidor de backend seguro que consuma los mensajes enviados sobre tu tema. Tu servidor puede usar las Bibliotecas cliente de Cloud Pub/Sub para consumir los mensajes.

Crea un tema

Para empezar a recibir notificaciones, es necesario que crees un tema en el que la Facturación Google Play publique las notificaciones. Para crear un tema, sigue estos pasos:

  1. Lee las instrucciones en Crea el tema.
  2. Usa Google Cloud Platform Console para crear el tema.

Crea una suscripción de Pub/Sub

Para recibir mensajes publicados en un tema, debes crear una suscripción de Pub/Sub a ese tema. Para crear una suscripción de Pub/Sub, haz lo siguiente:

  1. Lee la Guía para suscriptores de Cloud Pub/Sub a fin de consultar si debes configurar la suscripción como una suscripción push o de extracción. Una suscripción de extracción requiere que el servidor de backend seguro inicie solicitudes en el servidor de Cloud Pub/Sub para obtener mensajes. Una suscripción push requiere que Cloud Pub/Sub inicie solicitudes en el servidor de backend seguro para entregar mensajes.
  2. Lee las instrucciones en Cómo agregar una suscripción.
  3. Usa Google Cloud Platform Console para crear la suscripción.

Otorga derechos de publicación en tu tema

Cloud Pub/Sub requiere que otorgues privilegios a la Facturación Google Play para publicar notificaciones en tu tema. Para hacerlo, sigue estos pasos:

  1. Abre Google Cloud Console.
  2. Selecciona tu proyecto y haz clic en Pub/Sub en el panel de navegación izquierdo.
  3. Encuentra tu tema y abre los detalles de permisos.
    Figura 1: Cómo acceder a la configuración Permisos
  4. Agrega la cuenta de servicio google-play-developer-notifications@system.gserviceaccount.com y asígnale la función de publicador de Pub/Sub.
    Figura 2: Cómo agregar la cuenta de servicio de Google Play como publicador de Pub/Sub
  5. Guarda para completar la configuración del tema.
    Figura 3: Tema configurado

Habilita las notificaciones en tiempo real para desarrolladores sobre tu app

A fin de habilitar las notificaciones en tiempo real para desarrolladores sobre tu app, haz lo siguiente:

  1. Abre Google Play Console.
  2. Selecciona tu app para Android.
  3. Navega a la página Herramientas de desarrollo > Servicios y API.
  4. Desplázate hasta la sección Notificaciones en tiempo real para desarrolladores ubicada al final de la página.

    Figura 4: Sección de notificaciones en tiempo real para desarrolladores

  5. En el campo Nombre del tema, ingresa el nombre del tema de Cloud Pub/Sub completo que configuraste antes. El nombre debe tener el formato projects/{project_id}/topics/{topic_name}, en el que project_id sea el identificador único de tu proyecto y topic_name el nombre del tema creado anteriormente.

  6. Haz clic en Enviar mensaje de prueba para enviar un mensaje de prueba. Realizar una publicación de prueba ayuda a garantizar que todo esté configurado de manera correcta. Si la publicación de prueba es correcta, aparece un mensaje que lo indica. Si se ejecuta un suscriptor en ese tema, debería recibir este mensaje de prueba.

    Si hay un error en la publicación, aparecerá un mensaje. Asegúrate de que el nombre del tema sea el correcto y de que la cuenta de servicio google-play-developer-notifications@system.gserviceaccount.com pueda acceder al tema como publicador de Pub/Sub.

  7. Haz clic en Actualizar tema.

Cambia el nombre del tema

Para cambiar el nombre del tema sin perder mensajes, realiza los siguientes pasos:

  1. Crea y configura la suscripción y el tema nuevos.
  2. Comienza a leer y procesar mensajes publicados en el tema nuevo.
  3. Actualiza el nombre del tema para la app en Play Console.
  4. Con Stackdriver o Cloud Developer Console, espera a que el tema antiguo deje de recibir mensajes y asegúrate de que el tema nuevo los reciba.
  5. Borra el tema antiguo después de que haya dejado de recibir mensajes.

Borra un tema

Para borrar un tema, haz lo siguiente:

  1. Para borrar el nombre de tema de la app, usa Google Play Console.
  2. Después de que dejen de llegar mensajes, borra el tema de Pub/Sub en Google o Google Cloud Platform Console.

Nota: Si borras el tema de Pub/Sub antes de quitar el nombre, es posible que se pierdan mensajes. Debes volver a configurar el tema con Pub/Sub para solucionar el problema.

Escala el procesamiento de notificaciones

Debido a la variedad de notificaciones que pueden enviarse al tema de Pub/Sub, es posible que no sea práctico que tengas un solo procesamiento binario para todas las notificaciones. Hay distintas opciones para considerar en el momento en que debes decidir cómo escalar el procesamiento de notificaciones. Estas son algunas opciones:

  • Usar notificaciones del estilo push y de extracción
  • Configurar múltiples suscripciones para un tema
  • Volver a publicar el mensaje de notificación en otros proyectos de Pub/Sub

Por ejemplo, una sola suscripción puede tener múltiples procesos que extraen mensajes de esa suscripción. Los mensajes de esa suscripción se dividen automáticamente entre los lectores. Luego, cada uno de esos procesos puede procesar la notificación o dirigir el reclamo a un servicio más especializado.

Es posible que se agreguen nuevos tipos de notificación en el futuro. Los suscriptores deben estar preparados para administrar correctamente las notificaciones nuevas si llegan a aparecer. Por lo general, esto se lleva a cabo reconociendo el mensaje recibido.

Nota: Si decides usar una suscripción push, registra los extremos antes de agregar un extremo push. Para obtener más información, consulta Cómo registrar extremos.

Para obtener más información, consulta la Descripción general de suscriptores de Pub/Sub.

Supervisa el tráfico de notificaciones

Para supervisar el tráfico de notificaciones, usa el servicio Google Stackdriver. Con este servicio, puedes supervisar el tráfico de un tema y configurar alertas para determinadas condiciones. Por ejemplo, puedes avisar si el recuento de mensajes no reconocidos es muy alto (lo que podría indicar que hay un problema con los suscriptores) o si el recuento de publicaciones es muy bajo (lo que podría indicar que hay un problema con las publicaciones del tema).

Determina los precios y las cuotas

Para conocer detalles sobre los precios y las cuotas, consulta precios y cuotas.

Calcula el uso de datos

La parte de datos de la notificación de suscripción es de aproximadamente 1 KB de datos por solicitud. Cada notificación de publicación o de extracción requiere una solicitud individual, o aproximadamente 2 KB de datos por notificación. La cantidad de notificaciones por mes depende del ciclo de facturación y del comportamiento de los usuarios. Debes esperar al menos una notificación por cada usuario durante un ciclo de facturación.

ANS

El servicio de notificaciones en tiempo real para desarrolladores no brinda ANS de latencia oficial. No obstante, la mayoría de las notificaciones debe publicarse en los pocos segundos posteriores al evento. Debes controlar las métricas de uso en tu página de Stackdriver (por ejemplo, la cantidad de mensajes sin reconocer) para asegurarte de procesar todos los mensajes de manera oportuna.

Especificación JSON

Cada publicación realizada en un tema de Pub/Sub incluye un objeto DeveloperNotification con codificación base64 simple que contiene los siguientes campos:

{
  "version": string,
  "packageName": string
  "eventTimeMillis": long
  "oneTimeProductNotification": OneTimeProductNotification
  "subscriptionNotification": SubscriptionNotification
  "testNotification": TestNotification
}
Nombre de la propiedad Valor Descripción
version string Es la versión de esta notificación. Inicialmente, será "1.0". Es distinta de los campos de otras versiones.
packageName string Es el nombre del paquete de la aplicación con la que está relacionada esta notificación (por ejemplo, com.algo.algo).
eventTimeMillis duración Es la marca de tiempo del evento en milisegundos a partir de la época ("epoch").
oneTimeProductNotification OneTimeProductNotification Si está este campo, esta notificación estará relacionada con un producto único. Contiene información adicional relacionada con el producto único. Este campo se excluye mutuamente con los campos testNotification y subscriptionNotification.
subscriptionNotification SubscriptionNotification Si está el campo, esa notificación estará relacionada con una suscripción. Contiene información adicional relacionada con la suscripción. Este campo se excluye mutuamente con los campos testNotification y oneTimeProductNotification.
testNotification TestNotification Si está el campo, esa notificación estará relacionada con una publicación de prueba. Estas solo se envían mediante Play Developer Console. Este campo se excluye mutuamente con los campos subscriptionNotification y oneTimeProductNotification.

Un objeto OneTimeProductNotification incluye los campos siguientes:

{
  "version": string
  "notificationType": int
  "purchaseToken": string
  "sku": string
}
Nombre de la propiedad Valor Descripción
version string Es la versión de esta notificación. Inicialmente, será "1.0". Es distinta de los campos de otras versiones.
notificationType int

El tipo de notificación. Puede tener los siguientes valores:

  • (1) ONE_TIME_PRODUCT_PURCHASED: Un usuario compró con éxito un producto único.
  • (2) ONE_TIME_PRODUCT_CANCELED: Un usuario canceló la compra pendiente de un producto único.
purchaseToken string Es el token proporcionado al dispositivo del usuario en el momento de la compra.
sku string Es el ID del producto único comprado (por ejemplo, "espada_001").

Nota: Las notificaciones de productos únicos solo se envían para transacciones pendientes. Para obtener más información, consulta las Notas de la versión 2.0 de la Biblioteca de Facturación Google Play.

Un objeto SubscriptionNotification incluye los siguientes campos:

{
  "version": string
  "notificationType": int
  "purchaseToken": string
  "subscriptionId": string
}
Nombre de la propiedad Valor Descripción
version string Es la versión de esta notificación. Inicialmente, será "1.0". Es distinta de los campos de otras versiones.
notificationType int

El tipo de notificación. Puede tener los siguientes valores:

  • (1) SUBSCRIPTION_RECOVERED: Se recuperó una suscripción de una suspensión de la cuenta.
  • (2) SUBSCRIPTION_RENEWED: Se renovó una suscripción activa.
  • (3) SUBSCRIPTION_CANCELED: Una suscripción se canceló de manera voluntaria o involuntaria. Las cancelaciones voluntarias se envían cuando la acción la realiza el usuario.
  • (4) SUBSCRIPTION_PURCHASED: Se adquirió una suscripción nueva.
  • (5) SUBSCRIPTION_ON_HOLD: Una suscripción entró en suspensión de la cuenta (si está habilitada).
  • (6) SUBSCRIPTION_IN_GRACE_PERIOD: Una suscripción entró en un período de gracia (si está habilitada).
  • (7) SUBSCRIPTION_RESTARTED: Un usuario reactivó su suscripción desde Play > Cuenta > Suscripciones (requiere que se acepte para restablecer la suscripción).
  • (8) SUBSCRIPTION_PRICE_CHANGE_CONFIRMED: El usuario confirmó correctamente un cambio en el precio de la suscripción.
  • (9) SUBSCRIPTION_DEFERRED: Se extendió el tiempo de recurrencia de una suscripción.
  • (10) SUBSCRIPTION_PAUSED: Se detuvo una suscripción.
  • (11) SUBSCRIPTION_PAUSE_SCHEDULE_CHANGED: Se modificó el programa de detención de una suscripción.
  • (12) SUBSCRIPTION_REVOKED: Un usuario revocó una suscripción antes del vencimiento.
  • (13) SUBSCRIPTION_EXPIRED: Venció una suscripción.
purchaseToken string Es el token que se envió al dispositivo del usuario cuando se compró la suscripción.
subscriptionId string Es el ID de la suscripción comprada (por ejemplo, "mensual001").

Nota: Solo se envían notificaciones para los eventos que requieren cambios en la autorización del usuario. Por ejemplo, la API de reembolsos no cambia la autorización del usuario, por lo que no activará una notificación.

Un objeto TestNotification incluye los campos siguientes:

{
  "version": string
}
Nombre de la propiedad Valor Descripción
version string Es la versión de esta notificación. Inicialmente, será "1.0". Es distinta de los campos de otras versiones.

Ejemplos

A continuación, se incluye un ejemplo de una notificación para una compra de suscripción:

{
  "version":"1.0",
  "packageName":"com.some.thing",
  "eventTimeMillis":"1503349566168",
  "subscriptionNotification":
  {
    "version":"1.0",
    "notificationType":4,
    "purchaseToken":"PURCHASE_TOKEN",
    "subscriptionId":"my.sku"
  }
}

A continuación, se incluye un ejemplo de una notificación de prueba:

{
  "version":"1.0",
  "packageName":"com.some.thing",
  "eventTimeMillis":"1503350156918",
  "testNotification":
  {
    "version":"1.0"
  }
}