1. Introducción
En este codelab, te enfocarás en crear un producto único, definir su opción de compra, establecer precios específicos para cada región y probar el flujo de compra de los productos únicos.
Público
Este codelab está dirigido a desarrolladores de apps para Android que deseen usar Play Console para administrar su catálogo de productos únicos.
Qué aprenderás
- El modelo de objetos de productos únicos.
- Cómo navegar y usar Google Play Console para administrar tu catálogo de productos únicos
- Cómo traducir los detalles de productos únicos a varios idiomas sin costo
- Cómo configurar la disponibilidad y los precios regionales para productos únicos
- Cómo usar las APIs de la Biblioteca de Play Billing para consultar los detalles de los productos únicos
- Cómo probar productos únicos con Play Billing Lab
Qué necesitarás
- Acceso a Google Play Console con una cuenta de desarrollador Si no tienes una cuenta de desarrollador, debes crear una.
- Una app de ejemplo para este codelab que puedes descargar desde GitHub
- Android Studio
2. Estreno de producto único
El modelo de objetos de productos únicos proporciona mayor flexibilidad en la forma de vender productos y reduce la complejidad de administrarlos. El modelo de objetos separa lo que se vende de cómo se vende, lo cual permite que el mismo derecho tenga varios precios y diferentes formas de comercializarse para los usuarios. El modelo de objetos tiene tres niveles de jerarquía:
- Producto único: Un objeto de producto define lo que compra el usuario.
- Opción de compra: Una opción de compra define cómo se otorga el derecho al usuario, su precio y dónde (en qué región) estará disponible el producto. Un solo producto puede tener varias opciones de compra, que pueden representar precios diferentes en distintas regiones.
- Oferta: Las ofertas pueden afectar el precio de la opción de compra a la que están vinculadas y se pueden usar para crear descuentos o un pedido por adelantado. Una sola opción de compra puede tener varias ofertas.
En el siguiente diagrama, se muestra el modelo de objetos de productos únicos.
Figura 1: Modelo de objeto único.
Para obtener más información, consulta la descripción general de los productos únicos.
3. Compila la app de ejemplo
En este codelab, se usa una app de ejemplo para Android para mostrarte cómo administrar productos únicos. La app de ejemplo está diseñada para ser una app para Android completamente funcional que tiene el código fuente completo que muestra los siguientes aspectos:
- Integra la app con PBL
- Recuperación de productos únicos y las opciones de compra relacionadas
- Ejecuta flujos de compra con precios regionales
En el siguiente video de demostración, se muestra cómo se verá y se comportará la app de ejemplo después de que se implemente y ejecute.
Si ya conoces los productos únicos y la Biblioteca de Facturación Play (PBL), puedes descargar la app de ejemplo y probarla.
Requisitos previos
Antes de compilar e implementar la app de ejemplo, haz lo siguiente:
- Crea una cuenta de desarrollador de Google Play Console. Si ya tienes una cuenta de desarrollador, omite este paso.
- Crea una app nueva en Play Console. Cuando crees una app, puedes especificar cualquier nombre para la app de ejemplo.
- Instala Android Studio.
Compilación
El objetivo de este paso de compilación es generar un archivo de Android App Bundle firmado de la app de ejemplo.
Para generar el paquete de aplicación para Android, sigue estos pasos:
- Descarga la app de ejemplo desde GitHub.
- Compila la app de ejemplo. Antes de compilarla, cambia el nombre del paquete y, luego, compílala. Si tienes paquetes de otras apps en Play Console, asegúrate de que el nombre del paquete que proporciones para la app de ejemplo sea único.
Nota: Cuando compilas la app de ejemplo, solo se crea un archivo APK que puedes usar para las pruebas locales. Sin embargo, ejecutar la app no recupera productos ni precios porque los productos no se configuraron en Play Console. - Genera un Android App Bundle firmado.
El siguiente paso es subir el paquete de aplicación para Android a Google Play Console.
4. Crea un producto único en Play Console
Para crear productos únicos en Google Play Console, debes tener una app en Play Console. Crea una app en Play Console y, luego, sube el paquete de aplicación firmado que creaste anteriormente.
Crea una app
Para crear una app, haz lo siguiente:
- Accede a Google Play Console con tu cuenta de desarrollador.
- Haz clic en Crear app. Se abrirá la página Crear app.
- Ingresa el nombre de la app, selecciona el idioma predeterminado y otros detalles relacionados con la app.
- Haz clic en Crear app. Esto creará una app en Google Play Console.
Ahora puedes subir el paquete de aplicación firmado de la app de ejemplo.
Sube el paquete de aplicación firmado
- Sube el paquete de aplicación firmado al segmento de prueba interna de Google Play Console. Solo después de subir la app, podrás configurar las funciones relacionadas con la monetización en Play Console.
- Haz clic en Prueba y lanza > Pruebas > Versión interna > Crear una versión nueva.
- Ingresa un nombre de versión y sube el archivo APK firmado.
- Haz clic en Siguiente y, luego, en Guardar y publicar.
Ahora puedes crear tus productos únicos.
Crea un producto único
Para crear un producto único, sigue estos pasos:
- En Google Play Console, en el menú de navegación de la izquierda, ve a Monetiza con Play > Productos > Productos únicos.
- Haz clic en Crear un producto único.
- Ingresa los siguientes detalles del producto:
- ID del producto: Ingresa un ID único. Por ejemplo,
trending_movie_1 - (Opcional) Etiquetas: Agrega etiquetas relevantes.
- Nombre: Ingresa un nombre de producto. Por ejemplo,
Product Movie - Descripción: Ingresa una descripción del producto. Por ejemplo,
Product Description
De forma predeterminada, el nombre y la descripción del producto están en el idioma inglés (Estados Unidos) – en-US. También puedes ingresar el nombre y la descripción en otros idiomas de forma manual. Para ingresar los detalles, haz clic en Administrar traducciones, selecciona los idiomas para los que deseas ingresar el texto traducido y, luego, haz clic en Aplicar. En la siguiente imagen, se muestra la opción Administrar traducciones:
Figura 2: Administrar traducciones.
Los idiomas que seleccionaste aparecerán en el menú desplegable de idiomas. Selecciona cada idioma y, luego, ingresa el nombre y la descripción correspondientes en el idioma seleccionado. También puedes traducir el nombre y la descripción del producto automáticamente sin costo. Para obtener más información, consulta la sección Cómo traducir productos únicos en este codelab.
Nota: Para los fines de este codelab, puedes omitir la configuración del campo Ícono y la sección Impuestos, cumplimiento y programas. - ID del producto: Ingresa un ID único. Por ejemplo,
- Haz clic en Siguiente.
- Agrega una opción de compra y configura su disponibilidad regional. Un producto único necesita al menos una opción de compra, que define cómo se otorga el derecho, su precio y la disponibilidad regional. En este codelab, agregaremos la opción estándar Comprar para el producto.
En la sección Opción de compra, ingresa los siguientes detalles:- ID de opción de compra: Ingresa un ID único. Por ejemplo,
buy-movie. - Tipo de compra: Selecciona Comprar.
- (Opcional) Etiquetas: Agrega etiquetas específicas para esta opción de compra.
- Haz clic en Opciones avanzadas para configurar las opciones avanzadas (opcional). Para los fines de este codelab, puedes omitir la configuración de las opciones avanzadas.
- ID de opción de compra: Ingresa un ID único. Por ejemplo,
- A continuación, debes configurar la disponibilidad y el precio regionales para la opción de compra. En la disponibilidad regional, especificarás las regiones en las que está disponible tu producto, incluidas las regiones en las que aún no se publicó tu app. De forma predeterminada, habrá una opción de compra disponible en todas las regiones.
En la sección Disponibilidad y precios, haz clic en Editar disponibilidad y acceso > Establecer como no disponible. Ten en cuenta que todas las regiones están configuradas como Disponible de forma predeterminada.- Selecciona todos los países, excepto
France,SpainyUnited States, y, luego, haz clic en Establecer como no disponible. - En el menú desplegable Todas las regiones, selecciona Países y regiones disponibles. Aquí solo se muestran los países que seleccionaste en el paso anterior.
- Para cada uno de los países disponibles, haz clic en el ícono de edición de la columna Precio. Se mostrará un diálogo para editar el precio. Ingresa y guarda los siguientes precios:
- En
France, ingresa 10 EUR. - En
Spain, ingresa 8 EUR. - En
United States, ingresa USD 13.
- En
- Selecciona todos los países, excepto
- Haz clic en Activar. De esta manera, tu producto único estará disponible con la opción de compra Comprar.
Nota: La moneda del precio regional se muestra según la configuración del país del usuario en Play. Por ejemplo, si el país de Play del usuario está configurado como Francia, el precio del producto único se muestra en euros.
Video sobre la creación de productos únicos
En el siguiente video, se muestran los pasos para crear un producto por única vez que se describieron anteriormente.
Cómo agregar una opción de compra de alquiler
Ahora, agrega una opción de compra de alquiler al producto único creado anteriormente.
- En Google Play Console, en el menú de navegación de la izquierda, ve a Monetiza con Play > Productos > Productos únicos.
- Haz clic en la flecha hacia la derecha del producto con el ID de producto
trending_movie_1que creaste en el paso anterior. - Haz clic en Agregar opción de compra.
- En la sección Opción de compra, ingresa los siguientes detalles:
- ID de la opción de compra: Ingresa
rent-movie. - Tipo de compra: Selecciona Alquilar.
- Período de alquiler: Selecciona 48 horas.
- Período de inicio del alquiler: Selecciona 24 horas.
- (Opcional) Etiquetas: Agrega etiquetas específicas para esta opción de compra.
- Haz clic en Opciones avanzadas para configurar las opciones avanzadas (opcional). Para los fines de este codelab, puedes omitir la configuración de las opciones avanzadas.
- ID de la opción de compra: Ingresa
- Luego, de manera similar a la opción de compra, configura la disponibilidad regional para la opción de compra de alquiler. Consulta los pasos 6 y 7 en la sección anterior. Cuando configures precios regionales, establece un precio diferente para los alquileres. Por ejemplo:
France: EUR 5Spain: EUR 4United States: USD 7
5. Traduce los detalles del producto único
Puedes traducir el nombre y la descripción de tu producto sin costo adicional con la función de traducción automática disponible en Google Play Console.
Para traducir el título y la descripción, haz lo siguiente:
- En Google Play Console, en el menú de navegación de la izquierda, ve a Crecimiento de usuarios > Traducciones > Productos integrados en la aplicación y en Play Store.
- Haz clic en Crear pedido.
- Selecciona la opción Traducción automática sin costo y, luego, haz clic en Siguiente.
- En los idiomas de Traducir a, selecciona Francés - fr-FR y Español - es-ES y, luego, haz clic en Siguiente.
- Selecciona Productos únicos y suscripciones y, luego, haz clic en Traducir y ver traducciones. Se mostrará un banner de renuncia de responsabilidad. Acepta la renuncia de responsabilidad.
- Ahora verás la lista de idiomas traducidos. Haz clic en Revisar y aplicar para un idioma. Revisa el texto y, luego, haz clic en Aplicar todas las traducciones. Repite este paso para todos los idiomas a los que elegiste traducir.
Después de la traducción, puedes editar el texto traducido en Play Console. Para editar el texto traducido, sigue estos pasos:
- Abre la página Productos únicos > [tu producto único] > Editar producto único > Editar detalles del producto único.
- Selecciona el idioma requerido en el menú desplegable. Se muestra el texto en el idioma seleccionado. En la siguiente imagen, se muestra la selección de un idioma para editar el texto traducido:
Figura 3: Edita el texto traducido. - Edita el texto según sea necesario y, luego, haz clic en Guardar cambios.
El usuario puede ver el texto traducido según las preferencias de idioma de su teléfono. Por ejemplo, si el idioma del teléfono del usuario está configurado en francés, el título y la descripción del producto único se mostrarán en francés. En la siguiente imagen de ejemplo, se muestra cómo y dónde aparecerá el texto traducido en diferentes idiomas.
Figura 4: Texto traducido en tu app.
Video de configuración de la traducción
En el siguiente video, se muestran los pasos de configuración de la traducción que se describieron anteriormente.
6. Integración con PBL
Para integrar tu app con la Biblioteca de Facturación Play (PBL), sigue estos pasos:
- Agrega la dependencia de la Biblioteca de Facturación Play a la app de ejemplo.
dependencies { val billing_version = "8.0.0" implementation("com.android.billingclient:billing-ktx:$billing_version") } - Inicializa el objeto BillingClient. BillingClient es el SDK del cliente que reside en tu app y se comunica con la Biblioteca de Facturación Play. En el siguiente fragmento de código, se muestra cómo inicializar el cliente de facturación.
private BillingClient createBillingClient() { return BillingClient.newBuilder(activity) .enablePendingPurchases(PendingPurchasesParams.newBuilder().enableOneTimeProducts().build()) // For one-time products, add a listener to process and acknowledge the purchases. This will notify // Google the purchase was processed. // For client-only apps, use billingClient.acknowledgePurchase(). // If you have a secure backend, you must acknowledge purchases on your server using the // server-side API. // See https://developer.android.com/google/play/billing/security#acknowledge // In this sample snippet purchases aren't processed. You must // implement your business logic to process and acknowledge the purchases. .setListener((billingResult, purchases) -> {}) .enableAutoServiceReconnection() .build(); } - Conéctate a Google Play.En el siguiente fragmento de código, se muestra cómo conectarse a Google Play.
/** * Starts the billing connection with Google Play. This method should be called exactly once * before any other methods in this class. * * @param productList The list of products to query for after the connection is established. */ public void startBillingConnection(List<Product> productList) { billingClient.startConnection( new BillingClientStateListener() { @Override public void onBillingSetupFinished(BillingResult billingResult) { if (billingResult.getResponseCode() == BillingResponseCode.OK) { Log.d(TAG, "Billing Client Connection Successful"); queryProductDetails(productList); } else { Log.e(TAG, "Billing Client Connection Failed: " + billingResult.getDebugMessage()); listener.onBillingSetupFailed(billingResult); // Propagate the error to the listener to show a message to the user. } } @Override public void onBillingServiceDisconnected() { Log.e(TAG, "Billing Client Connection Lost"); listener.onBillingError("Billing Connection Lost"); } }); } - Recupera los detalles del producto único.Después de integrar tu app con PBL, debes recuperar los detalles del producto único en tu app. En el siguiente fragmento de código, se muestra cómo recuperar los detalles del producto único en tu app.
Si recuperas el producto único (private void queryProductDetails(List<Product> productList) { QueryProductDetailsParams queryProductDetailsParams = QueryProductDetailsParams.newBuilder().setProductList(productList).build(); billingClient.queryProductDetailsAsync( queryProductDetailsParams, new ProductDetailsResponseListener() { @Override public void onProductDetailsResponse( BillingResult billingResult, QueryProductDetailsResult productDetailsResponse) { if (billingResult.getResponseCode() == BillingResponseCode.OK) { List<ProductDetails> productDetailsList = productDetailsResponse.getProductDetailsList(); listener.onProductDetailsResponse(productDetailsList); } else { Log.e(TAG, "QueryProductDetailsAsync Failed: " + billingResult.getDebugMessage()); listener.onBillingError("Query Products Failed: " + billingResult.getResponseCode()); } } }); }trending_movie_1en este ejemplo) enProductDetails, obtendrás una respuesta similar a la siguiente: Observa que las opciones de compra de alquiler y compra están disponibles en{ "productId": "trending_movie_1", "type": "inapp", "title": "Purrfect Mayhem: The Rewind Protocol (Movies All Day | Play Samples)", "name": "Purrfect Mayhem: The Rewind Protocol", "description": "Dr. Arid Thorne and a smart tiger named Yolo find a mysterious tape. It's a \"Rewind Protocol\" to fix time. A shadowy group, the Clockinator, hunts them to seize the tape's power.", "skuDetailsToken": "<---skuDetailsToken--->", "oneTimePurchaseOfferDetails": {}, "oneTimePurchaseOfferDetailsList": [ { "priceAmountMicros": 13000000, "priceCurrencyCode": "USD", "formattedPrice": "$13.00", "offerIdToken": "<---buy offerIdToken --->", "purchaseOptionId": "buy-option", "offerTags": [ "adventure", "mystery" ] }, { "priceAmountMicros": 7000000, "priceCurrencyCode": "USD", "formattedPrice": "$7.00", "offerIdToken": "<---rent offerIdToken--->", "purchaseOptionId": "rent-option", "offerTags": [ "adventure", "mystery" ], "rentalDetails": { "rentalPeriod": "P30D", "rentalExpirationPeriod": "PT24H" } } ] }oneTimePurchaseOfferDetailsList. Esta lista tiene 2 opciones de compra (buy-option y rent-option) que se configuraron en Play Console. Puedes identificar cada opción de compra de forma única por su offerIdToken. - Recupera los tokens de oferta para las ofertas de alquiler y compra. Necesitas los tokens de la oferta para iniciar el flujo de facturación en el paso 6.
@Override public void onProductDetailsResponse(List<ProductDetails> productDetailsList) { if (productDetailsList != null && !productDetailsList.isEmpty()) { // Iterate over all details of the queried product in step 4. for (ProductDetails productDetails : productDetailsList) { // Get the list of all the offers associated with the product. List<ProductDetails.OneTimePurchaseOfferDetails> offerDetailsList = productDetails.getOneTimePurchaseOfferDetailsList(); // Iterate over the offer details for (ProductDetails.OneTimePurchaseOfferDetails offerDetails : offerDetailsList) { // For a Rent purchase option, the // offerDetails.getRentalDetails() method returns // the rent information. If this information is present, // the offer corresponds to a Rent purchsae option. if (offerDetails.getRentalDetails() != null) { rentFormattedPrice = offerDetails.getFormattedPrice(); // Get the offerIdToken for the Rent purchase option rentOfferToken = offerDetails.getOfferToken(); rentMovieTags = offerDetails.getOfferTags(); } // If the offerDetails.getRentalDetails() returns // null, the offer corresponds to a Buy purchsae option. else { buyFormattedPrice = offerDetails.getFormattedPrice(); // Get the offerIdToken for the Buy purchase option buyOfferToken = offerDetails.getOfferToken(); buyMovieTags = offerDetails.getOfferTags(); } } updateUIButtons(); return; } } else { Log.e(TAG, "No product details found for " + productId); } } - Inicia el flujo de facturación.
/** * Launches the billing flow for the product with the given offer token. * * @param activity The activity instance from which the billing flow will be launched. * @param productDetails The product details of the product to purchase. * @param offerToken The offer token of the product to purchase. * @return The result of the billing flow. */ public void launchPurchase(Activity activity, ProductDetails productDetails, String offerToken) { ImmutableList<BillingFlowParams.ProductDetailsParams> productDetailsParamsList = ImmutableList.of( BillingFlowParams.ProductDetailsParams.newBuilder() .setProductDetails(productDetails) .setOfferToken(offerToken) .build()); BillingFlowParams billingFlowParams = BillingFlowParams.newBuilder() .setProductDetailsParamsList(productDetailsParamsList) .build(); billingClient.launchBillingFlow(activity, billingFlowParams); }
Sugerencia: También puedes configurar notificaciones para desarrolladores en tiempo real (RTDN) para implementar campañas de recuperación y otras estrategias de administración del ciclo de vida de las compras. Para comprender cómo configurar las RTDN y controlar las notificaciones con un seguimiento y derechos precisos, te recomendamos que realices el codelab Maximize Your Play Billing Integration.
7. Opciones de compra de prueba
Antes de que tus productos únicos estén disponibles en tu app publicada, puedes probar la integración de la PBL con verificadores de licencias y Play Billing Lab.
Aprenderás a probar la localización y la disponibilidad de precios en los casos en que la app solo está disponible en algunas regiones con un precio diferente para cada una.
Requisitos previos
- Agrega un verificador de licencias en Google Play Console y, luego, habilítalo para las pruebas internas.
- Descarga e instala la app de Play Billing Lab en tu teléfono o emulador.
- Ejecuta la app de ejemplo que creaste anteriormente en tu teléfono o emulador.
Probar los precios regionales para las opciones de compra
Para probar los precios regionales de las opciones de compra, haz lo siguiente:
- Abre la app de Play Billing Lab y, luego, accede como verificador de licencias.
- En Configuration Settings, haz clic en Edit, selecciona el país
Francey, luego, haz clic en Apply. Aquí seleccionamos el país de Play, que determina la moneda que se mostrará en la app. - Cierra y vuelve a abrir la app de ejemplo. Ahora debería mostrar la moneda de compra y alquiler para
Franceen euros.
Para probar con otro país, selecciona Spain en el paso 2 y, luego, realiza el paso 3.
Video de prueba de Play Billing Lab
En el siguiente video, se muestran los pasos para probar los precios regionales con la app de ejemplo.
8. Próximos pasos
- Obtén más información para maximizar la integración de la facturación de Play.
- Obtén información para analizar las interrupciones en la compra de productos.
- Recuerda seguir las prácticas recomendadas para verificar y procesar compras en tu backend seguro una vez que los usuarios comiencen a comprar estos productos.
Documentos de referencia
9. ¡Felicitaciones!
¡Felicitaciones! Navegaste con éxito por Google Play Console para crear un nuevo producto único, configuraste una opción de compra y probaste el flujo de compra con Play Billing Lab. Ahora tienes una mejor comprensión del catálogo de productos flexible de Google Play para las compras únicas.
Encuesta
Valoramos mucho tus comentarios sobre este codelab. Considera dedicar unos minutos a completar nuestra encuesta.