Promociones integradas en la aplicación

Los códigos promocionales te permiten entregar contenido o funciones a un número limitado de usuarios de manera gratuita. Luego de crear un código promocional, puedes distribuirlo conforme a las condiciones del servicio. El usuario introduce el código promocional en tu app o la app de Google Play Store y recibe el artículo sin costo. Puedes usar códigos promocionales de forma creativa para atraer a los usuarios de distintas maneras, tales como las siguientes:

  • Un juego puede tener un artículo especial, como un personaje o decoración, que solo esté disponible para usuarios que asistan a un evento. El desarrollador puede distribuir tarjetas con códigos promocionales en el evento y los usuarios pueden introducir sus códigos promocionales para desbloquear el artículo.
  • Un desarrollador de apps puede distribuir códigos promocionales en negocios locales a fin de incentivar a usuarios potenciales para que prueben la app.
  • Un desarrollador de apps puede entregar a sus empleados códigos para familiares y amigos para que los compartan con sus amigos.

Cada código promocional se asocia a un ID de producto en particular (también conocido como SKU). Puedes crear códigos promocionales para tus productos integrados en la aplicación actuales. También puedes mantener una SKU fuera de la Play Store para que la única forma de obtener ese artículo sea introduciendo el código promocional de la SKU. Cuando un usuario introduce el código promocional en Play Store o en una app, obtiene el artículo como si pagara su precio total. Si tu app ya usa la In-app Billing Version 3 API para admitir compras directas desde la aplicación, es fácil añadir compatibilidad con códigos promocionales.

Crear y canjear códigos promocionales

Creas y canjeas códigos promocionales a través de la Google Play Developer Console. Cada código promocional se asocia a un único producto registrado en la Developer Console.

Un usuario puede canjear un código promocional de alguna de las dos maneras siguientes:

  • El usuario puede introducir el código promocional como parte del flujo de compra ordinario de la app, como se describe en Cómo implementar facturación integrada. En lo que respecta a la app, esta es igual a una compra común, con la excepción de que el usuario hace el pago con un código promocional en lugar de dinero.
  • El usuario puede canjear el código en la app de Google Play Store. Una vez que el usuario introduce el código, la Play Store le solicita abrir la app (si tiene la última versión instalada), descargarla o actualizarla. Google no admite actualmente el canje de códigos promocionales desde la tienda web de Google Play.

Admitir códigos promocionales en tu app

Para admitir códigos promocionales, tu app debe llamar al método getPurchases() cada vez que se inicia o se reanuda. Este método muestra un paquete con todas las compras actuales, no consumidas, incluidas las que el usuario realizó mediante el canje de un código promocional. El enfoque más simple consiste en llamar a getPurchases() en el método onResume() de tu actividad, ya que ese callback se activa cuando se crea la actividad, así como cuando la actividad se reanuda. Llamar a getPurchases() cuando se inicia o se reanuda la aplicación garantiza que tu app advierta las compras y los canjes que el usuario pueda haber hecho mientras la aplicación no estaba en ejecución. Además, si un usuario realiza una compra mientras la aplicación está en ejecución, y tu app no la capta por alguna razón, tu app de todos modos advierte la compra la siguiente vez que la actividad se reanuda y llama a getPurchases().

Tu app debe permitir que los usuarios puedan canjear códigos promocionales dentro de ella. Si esta admite el flujo de trabajo de compras directas desde la aplicación (que se describe en Cómo realizar solicitudes de facturación integrada), tu app admite automáticamente el canje de códigos promocionales desde la aplicación. Cuando inicias la IU de compras directas desde la aplicación, el usuario tiene la opción de pagar la compra con un código promocional. El método onActivityResult() de tu actividad recibe una intent de respuesta que informa a la app si la compra se completó. Sin embargo, tu app debe llamar igualmente a getPurchases() al iniciarse o reanudarse en caso de que el flujo de trabajo de la compra y del consumo no se completen. Por ejemplo, si el usuario canjea correctamente un código promocional y tu app falla antes de que se consuma el artículo, tu app recibe igualmente información sobre la compra cuando la app llama a getPurchases() en el siguiente inicio.

Tu app también debe admitir un caso en el cual un usuario canjee un código promocional en la app de Play Store mientras la aplicación esté en ejecución. Tu app puede determinar de inmediato el momento en que el usuario canjea un código registrando de un receptor para la intent PURCHASES_UPDATED. Play Store activa esta intent cuando un usuario canjea un código promocional.

Para recibir la intent PURCHASES_UPDATED, crea un objeto BroadcastReceiver de manera dinámica y regístralo para recibir com.android.vending.billing.PURCHASES_UPDATED. Registra el receptor insertando un código similar al siguiente en el método onResume() de tu actividad:

IntentFilter promoFilter =
    new IntentFilter("com.android.vending.billing.PURCHASES_UPDATED");
registerReceiver(myPromoReceiver, promoFilter);

Cuando el usuario hace una compra, el sistema invoca al método onReceive() de tu receptor de transmisión. Ese método debe llamar a getPurchases() para ver las compras que ha hecho el usuario.

Para reducir la sobrecarga del sistema cuando tu app no esté en ejecución, el método onPause() de tu actividad debe quitar el registro del receptor de transmisión:

unRegisterReceiver(myPromoReceiver);

Nota: No registres este receptor de transmisión en el manifiesto de la app. Si se declara el receptor en el manifiesto, puedes hacer que el sistema inicie la app para gestionar la intent, en el caso de que el usuario haga una compra mientras la app no esté en ejecución. Este comportamiento no es necesario y podría disgustar al usuario. Para captar cualquier compra que el usuario haya hecho mientras la app no esté en ejecución, llama a getPurchases() cuando el usuario la inicie.

Probar promociones integradas en la aplicación

Si tu app admite promociones integradas en la aplicación, prueba los siguientes casos de uso.

El usuario canjea el código promocional en la app

Si el usuario canjea un código promocional dentro del flujo de compra de la app, como se describe en Realizar una solicitud de facturación integrada, el sistema invoca al método onActivityResult() de tu actividad para gestionar la compra. Verifica que onActivityResult() gestione correctamente la compra, independientemente de que el usuario pague con dinero o con un código promocional.

El usuario canjea el código promocional en la Google Play Store

Si el usuario canjea un código promocional en Play Store, existen distintos flujos de trabajo posibles. Verifica cada uno de estos flujos de trabajo.

La app no está instalada

Si el usuario canjea un código promocional para una app que no está instalada en el dispositivo, Play Store solicita al usuario que instale la app. (Si la app está instalada y desactualizada, la Play Store pide al usuario que la actualice). Prueba las siguientes secuencias en un dispositivo que no tenga tu app instalada.

  1. El usuario canjea un código promocional para la app en Play Store. Play Store pide al usuario que instale tu app.
  2. El usuario instala y luego inicia tu app. Verifica que al iniciarse, la app llame a getPurchases() y detecte correctamente la compra que hizo el usuario con el código promocional.

La app está instalada, pero no se encuentra en ejecución

Si el usuario canjea un código promocional para una app que se encuentra instalada en el dispositivo, Play Store solicita al usuario que la active. Prueba la siguiente secuencia en un dispositivo en el cual tu app esté instalada y no se encuentre en ejecución:

  1. El usuario canjea un código promocional para la app en Play Store. La Play Store pide al usuario que cambie a tu app.
  2. El usuario inicia tu app. Verifica que, al iniciarse, la app llame a getPurchases() y detecte correctamente la compra que el usuario hizo con el código promocional.

La app está instalada y se encuentra en ejecución

Si el usuario canjea un código promocional para una app que actualmente se encuentra en ejecución en el dispositivo, Play Store notifica a la app a través de una intent PURCHASES_UPDATED. Prueba la siguiente secuencia:

  1. El usuario inicia la aplicación. Verifica que la app se haya registrado a sí misma para recibir la intent PURCHASES_UPDATED.
  2. El usuario inicia la app de Play Store y canjea un código promocional para la app. Play Store activa una intent PURCHASES_UPDATED. Verifica que se active el callback BroadcastReceiver.onReceive() de tu app para gestionar la intent.
  3. Tu método onReceive() debe responder a la intent llamando a getPurchases(). Verifica que tu app llame a este método y detecte correctamente la compra que hizo el usuario con el código promocional.
  4. El usuario activa nuevamente tu app. Verifica que el usuario tenga el artículo comprado.