Guía de integración integrada en la app solo para facturación alternativa

En esta guía, se describe cómo integrar las APIs para ofrecer solo facturación alternativa (es decir, sin elección del usuario) en las apps aptas. Para obtener más información sobre estos programas, incluidos los requisitos de elegibilidad y el alcance geográfico, consulta Acerca de la facturación alternativa.

Configuración de la Biblioteca de Facturación Play

Agrega la dependencia de la Biblioteca de Facturación Play a tu app para Android. Si quieres usar las APIs de facturación alternativa, debes utilizar la versión 6.1 o una posterior.

Cómo conectarse a Google Play

Los primeros pasos del proceso de integración son los mismos que los descritos en la Guía de integración de la Facturación Google Play, con algunas modificaciones cuando inicializas tu BillingClient:

En el siguiente ejemplo, se muestra cómo inicializar un objeto BillingClient con estas modificaciones:

Kotlin


var billingClient = BillingClient.newBuilder(context)
    .enableAlternativeBillingOnly()
    .build()

Java

private BillingClient billingClient = BillingClient.newBuilder(context)
    .enableAlternativeBillingOnly()
    .build();

Después de inicializar el objeto BillingClient, debes establecer una conexión con Google Play, como se describe en la guía de integración.

Cómo comprobar la disponibilidad

Tu app debe confirmar que solo está disponible la facturación alternativa llamando a isAlternativeBillingOnlyAvailableAsync.

Esta API devolverá BillingResponseCode.OK si solo está disponible la facturación alternativa. Consulta la sección de manejo de respuestas para obtener detalles sobre cómo tu app debe responder a otros códigos de respuesta.

Kotlin


billingClient.isAlternativeBillingOnlyAvailableAsync(object:
    AlternativeBillingOnlyAvailabilityListener {
        override fun onAlternativeBillingOnlyAvailabilityResponse(
            billingResult: BillingResult) {
            if (billingResult.responseCode !=  BillingResponseCode.OK) {
                // Handle failures such as retrying due to network errors,
                // handling alternative billing only being unavailable, etc.
                return
            }

            // Alternative billing only is available. Continue with steps in
            // the guide.
        }
    });

Java


billingClient.isAlternativeBillingOnlyAvailable(
    new AlternativeBillingOnlyAvailabilityListener() {
        @Override
        public void onAlternativeBillingOnlyAvailabilityResponse(
            BillingResult billingResult) {
            if (billingResult.getResponseCode() != BillingResponseCode.OK) {
                 // Handle failures such as retrying due to network errors,
                 // handling alternative billing only being unavailable,
                 // etc.
                return;
            }

            // Alternative billing only is available. Continue with steps in
            // the guide.
        }
    });

Diálogo de información para los usuarios

Para realizar la integración solo a la facturación alternativa, tu app apta debe mostrar una pantalla de información que ayude a los usuarios a comprender que Google Play no administrará la facturación. La pantalla de información se debe mostrar a los usuarios llamando a la API de showAlternativeBillingOnlyInformationDialog antes de iniciar el flujo de facturación alternativa cada vez. Si el usuario ya aceptó el diálogo, por lo general, el uso de esta API no hará que se vuelva a mostrar. En algunas ocasiones, es posible que el diálogo se vuelva a mostrar a un usuario en situaciones como cuando el usuario borra la caché de su dispositivo.

Kotlin


// An activity reference from which the alternative billing only information
// dialog will be launched.
val activity : Activity = ...;

val listener : AlternativeBillingOnlyInformationDialogListener =
    AlternativeBillingOnlyInformationDialogListener { 
        override fun onAlternativeBillingOnlyInformationDialogResponse(
            billingResult: BillingResult) {
            // check billingResult
        }
}

val billingResult =
    billingClient.showAlternativeBillingOnlyInformationDialog(activity,
        listener)

Java


// An activity reference from which the alternative billing only information
// dialog will be launched.
Activity activity = ...;

AlternativeBillingOnlyInformationDialogListener listener =
    new AlternativeBillingOnlyInformationDialogListener() {
        @Override
        public void onAlternativeBillingOnlyInformationDialogResponse(
            BillingResult billingResult) {
                // check billingResult
            }
    };

BillingResult billingResult =
    billingClient.showAlternativeBillingOnlyInformationDialog(activity,
        listener);

Si este método devuelve BillingResponseCode.OK, tu app podrá continuar con la transacción. En el caso de BillingResponseCode.USER_CANCELED, tu app debe llamar a showAlternativeBillingOnlyInformationDialog para volver a mostrar el diálogo al usuario. Para ver otros códigos de respuesta, consulta la sección de manejo de respuestas.

Cómo informar transacciones a Google Play

Todas las transacciones realizadas con un sistema alternativo de facturación se deben informar a Google Play. Para ello, debes llamar a la API de Google Play Developer desde tu backend en un plazo de 24 horas y proporcionar un externalTransactionToken, que se obtiene con la API que se describe a continuación. Se debe generar un externalTransactionToken nuevo para cada compra única, cada suscripción nueva y cualquier actualización o cambio a una versión inferior de una suscripción existente. Si quieres obtener información para informar una transacción una vez que se obtiene un externalTransactionToken, consulta la guía de integración del backend.

Kotlin

billingClient.createAlternativeBillingOnlyReportingDetailsAsync(object:
    AlternativeBillingOnlyReportingDetailsListener {
        override fun onAlternativeBillingOnlyTokenResponse(
            billingResult: BillingResult,
            alternativeBillingOnlyReportingDetails:
                AlternativeBillingOnlyReportingDetails?) {
            if (billingResult.responseCode !=  BillingResponseCode.OK) {
                // Handle failures such as retrying due to network errors.
                return
            }

            val externalTransactionToken =
                alternativeBillingOnlyReportingDetails?
                    .externalTransactionToken

            // Send transaction token to backend and report to Google Play.
        }
    });

Java


billingClient.createAlternativeBillingOnlyReportingDetailsAsync(
    new AlternativeBillingOnlyReportingDetailsListener() {
        @Override
        public void onAlternativeBillingOnlyTokenResponse(
            BillingResult billingResult,
            @Nullable AlternativeBillingOnlyReportingDetails
                alternativeBillingOnlyReportingDetails) {
            if (billingResult.getResponseCode() != BillingResponseCode.OK) {
                // Handle failures such as retrying due to network errors.
                return;
            }

            String transactionToken =
                alternativeBillingOnlyReportingDetails
                .getExternalTransactionToken();

            // Send transaction token to backend and report to Google Play.
        }
    });

Control de respuestas

Los métodos anteriores isAlternativeBillingOnlyAvailableAsync(), showAlternativeBillingOnlyInformationDialog() y createAlternativeBillingOnlyReportingDetailsAsync() pueden devolver respuestas non-BillingResponseCode.OK en caso de errores. A continuación, se describe el manejo recomendado de los errores:

  • ERROR: Este es un error interno. Continúa con el procesamiento de la transacción a través del sistema alternativo de facturación. No es necesario informar la transacción a Google, incluidas las renovaciones de las suscripciones afectadas.
  • FEATURE_NOT_SUPPORTED: Play Store no admite las APIs de facturación alternativa en el dispositivo actual. Continúa con el procesamiento de la transacción a través del sistema alternativo de facturación. No es necesario informar la transacción a Google ni las renovaciones de las suscripciones afectadas.
  • USER_CANCELED: Vuelve a llamar a showAlternativeBillingOnlyInformationDialog() para mostrarle al usuario el diálogo de información la próxima vez que intente realizar una compra.
  • BILLING_UNAVAILABLE: La transacción no es apta para solo la facturación alternativa y, por lo tanto, no debe continuar con este programa. Esto se debe a que el usuario no está en un país compatible para este programa o a que tu cuenta no se inscribió correctamente en el programa. Si es la última opción, verifica el estado de inscripción en Play Console.
  • DEVELOPER_ERROR: Se produjo un error con la solicitud. Usa el mensaje de depuración para identificar y corregir el error antes de continuar.
  • NETWORK_ERROR, SERVICE_DISCONNECTED, SERVICE_UNAVAILABLE: Estos son errores transitorios que se deben reintentar. En el caso de SERVICE_DISCONNECTED, restablece una conexión con Google Play antes de reintentarlo.

Prueba la facturación alternativa

Los verificadores con licencia deben usarse para probar la integración de facturación alternativa. No se te facturarán las transacciones que se hayan iniciado con cuentas de verificador con licencia. Consulta Prueba la facturación integrada con licencias de aplicaciones para obtener más información sobre la configuración de verificadores de licencias.

Próximos pasos

Una vez que termines la integración en la app, tendrás todo listo para integrar tu backend.