Recordatorio: Tienes hasta el 1 de noviembre de 2020 para admitir las funciones de suspensión de cuentas y restablecimiento de suscripciones. Se habilitarán de forma predeterminada las funciones para pausar las suscripciones y volver a suscribirse, a menos que decidas rechazar esta configuración de forma explícita. Obtén más información.

Cómo agregar funciones específicas para productos entregados como recompensa

Una manera de desbloquear productos integrados en la aplicación y beneficios para tus usuarios es crear productos entregados como recompensa o elementos que reciben los usuarios después de ver un anuncio de video. Al brindar productos entregados como recompensa, permites que los usuarios obtengan recompensas y beneficios integrados en la aplicación sin tener que hacer compras directas.

En este documento, se explica cómo implementar la función específica de los productos entregados como recompensa. La sección del diagrama de flujo de trabajo de esta página ilustra el proceso.

Cómo identificar productos entregados como recompensa de tu app

Los productos entregados como recompensa tienen un objeto SkuType de INAPP. Para garantizar que los usuarios puedan ver varios anuncios y obtener diversas recompensas, se deben consumir los productos.

Antes de ofrecer un producto entregado como recompensa a un usuario, debes obtener el SkuDetails de ese producto. Para eso, llama a querySkuDetailsAsync() con SkuType.INAPP como el tipo de producto.

Cómo declarar anuncios apropiados para la edad

Para ayudar en el cumplimiento de las obligaciones legales relacionadas con niños y usuarios menores de edad, como la Ley de Protección de la Privacidad de Menores en Internet (COPPA) y el Reglamento General de Protección de Datos (GDPR), tu app debe declarar qué anuncios pueden estar dirigidos a niños de Estados Unidos o a usuarios que aún no tengan la edad de consentimiento aplicable de su país. En el Centro de ayuda de AdMob, se explica cuándo debes etiquetar tus solicitudes de anuncios como contenido dirigido a niños y cuándo debes etiquetarlas como contenido apto para menores de edad. También se explica qué efecto tienen esas etiquetas.

Cuando crees el cliente de facturación de tu app, considera si las solicitudes de anuncios recompensados deben tratarse como dirigidas a niños o si deben dirigirse a usuarios que no alcanzan la edad de consentimiento. Si deben implementarse estas restricciones en las solicitudes de anuncios, llama a los métodos setChildDirected() y setUnderAgeOfConsent(), e indica los valores correspondientes para cada uno.

En el siguiente fragmento de código, se muestra cómo declarar que los anuncios de video son adecuados para niños o para usuarios que no alcanzan la edad de consentimiento:

Kotlin

val billingClient = BillingClient.newBuilder(context)
        .setListener(this)
        .setChildDirected(ChildDirected.CHILD_DIRECTED)
        .setUnderAgeOfConsent(UnderAgeOfConsent.UNDER_AGE_OF_CONSENT)
        .build()

Java

BillingClient billingClient =
    BillingClient.newBuilder(context)
        .setListener(this)
        .setChildDirected(ChildDirected.CHILD_DIRECTED)
        .setUnderAgeOfConsent(UnderAgeOfConsent.UNDER_AGE_OF_CONSENT)
        .build();

Cómo cargar anuncios de video

Antes de mostrarle al usuario la opción para ver un anuncio de video y recibir un producto entregado como recompensa, debes cargar el video. Para hacerlo, crea un objeto RewardLoadParams, asociándolo con el objeto SkuDetails que representa al producto entregado como recompensa. Luego, llama al método loadRewardedSku() de tu cliente de facturación y pasa el objeto RewardLoadParams y un objeto RewardResponseListener.

El objeto de escucha de RewardResponseListener recibe una notificación cuando el video termina de cargarse. Además, recibe una notificación si el video no está disponible o si ocurre otro error, por ejemplo, si se agota el tiempo de espera del servidor.

Para mantener el rendimiento del dispositivo cuando cargas los videos asociados con los productos otorgados como recompensa de tu app, ten en cuenta las siguientes prácticas recomendadas:

  • Como máximo, carga tres SKU de productos entregados como recompensa a la vez.
  • Intenta cargar los videos cada vez que el usuario ingrese a tu app. Este paso te ayuda a comprobar si los videos todavía están cargados y disponibles.
  • Cuando decidas en qué momento cargar los videos, prioriza un equilibrio entre el uso de ancho de banda y la capacidad de respuesta de la app que mejor se adapte a tu caso práctico:

    • Como temprano, carga los videos después de llamar al getSkuDetails() para el producto entregado como recompensa asociado. La capacidad de respuesta de tu app sigue siendo alta, pero es posible que desperdicies datos de red al cargar un video que el usuario no verá nunca.
    • Como muy tarde, carga el video cuando el usuario navegue a la página en la que se mostrará el video. En ese caso, es muy raro que la app desperdicie ancho de banda, pero es posible que el usuario tenga que esperar unos momentos para poder hacer clic en el botón que permite ver el video.

En el siguiente fragmento de código, se muestra el proceso para cargar un anuncio de video que se reproduce antes de que el usuario reciba un producto entregado como recompensa:

Kotlin

if (skuDetails.isRewarded()) {
    val params = RewardLoadParams.Builder()
            .setSkuDetails(skuDetails)
            .build()
    mBillingClient.loadRewardedSku(params.build(),
            object : RewardResponseListener {
        override fun onRewardResponse(@BillingResponse responseCode : Int) {
            if (responseCode == BillingResponse.OK) {
                // Enable the reward product, or make
                // any necessary updates to the UI.
            }
        }
    })
}

Java

if (skuDetails.isRewarded()) {
    RewardLoadParams.Builder params = RewardLoadParams.newBuilder();
    params.setSkuDetails(skuDetails);
    mBillingClient.loadRewardedSku(params.build(),
        new RewardResponseListener() {
            @Override
            public void onRewardResponse(int responseCode) {
                if (responseCode == BillingResponse.OK) {
                      // Enable the reward product, or make
                      // any necessary updates to the UI.
                  }
            }
        });
}

Otorga a los usuarios compras entregadas como recompensa

Si la biblioteca de Facturación Google Play carga correctamente el video asociado con un producto entregado como recompensa, es decir, si RewardResponseListener recibe un objeto responseCode de BillingResponse.OK, puedes iniciar el flujo de facturación.

A fin de comenzar a reproducir anuncios para un producto entregado como recompensa, llama a launchBillingFlow(), al igual que lo haces para todos los demás tipos de productos integrados en la aplicación. Aunque el usuario no esté haciendo una compra directa para recibir un producto entregado como recompensa, igual debes habilitar el flujo de facturación para que pueda obtener y usar el producto.

Consumo de la compra

Para notificar a tu cliente de facturación que un usuario recibió y consumió un producto entregado como recompensa, administra la compra con el método onPurchasesUpdated() del objeto de escucha del cliente de facturación. Ten en cuenta que los productos adquiridos con recompensa deben consumirse.

Cómo probar los productos entregados como recompensa

Para probar la forma en que tu app carga anuncios de video y proporciona a los usuarios los productos entregados como recompensa, aprovecha los verificadores con licencia, quienes, de manera predeterminada, obtienen anuncios de prueba en lugar de anuncios reales. Puedes obtener información sobre cómo configurar cuentas para el personal de pruebas en Cómo probar una app de Facturación Google Play con usuarios.

Otro método de prueba es usar el ID del producto android.test.reward. Este producto específico es un nombre reservado de Facturación Google Play, por lo que no es necesario que lo agregues a tu lista de productos integrados en la aplicación en Play Console.

Advertencia: Cuando pruebes los productos entregados como recompensa de tu app, no uses productos reales; si lo haces, es posible que tu cuenta se marque como una cuenta fraudulenta o de spam.

No obstante, cuando termines de realizar las pruebas, asegúrate de reemplazar android.test.reward con los ID del producto correspondientes a los productos entregados como recompensa reales antes de lanzar la versión de producción de la app para los usuarios finales.

Diagrama del flujo de trabajo de productos entregados como recompensa

El siguiente diagrama de secuencias muestra cómo el usuario, tu app y la Biblioteca de Facturación Google Play funcionan juntos para mostrar un anuncio de video y otorgarle acceso al usuario a un producto entregado como recompensa:

Diagrama de secuencias que muestra el protocolo de productos entregados como recompensa
Figura 1: Pasos para completar la compra de un producto entregado como recompensa a través de Facturación Google Play