Cómo usar la Facturación Play en tu Actividad web de confianza

Además de permitir que tu app venda artículos digitales y suscripciones en Play Store, la Facturación Google Play ofrece herramientas para administrar tu catálogo, precios y suscripciones, informes útiles y un flujo de confirmación potenciado por Play Store que ya conocen tus usuarios. También es un requisito para las aplicaciones publicadas en Play Store que venden artículos digitales.

Chrome 88 se lanza con una prueba de origen en Android que permite la integración de Actividades web de confianza con la API de Payment Request y la API de Digital Goods para implementar flujos de compra a través de la Facturación Google Play. Esperamos que esta prueba de origen también esté disponible para ChromeOS en la versión 89.

Para facilitar la integración en la app para Android, el equipo de Trusted Web Activity presenta una biblioteca de extensiones para android-browser-helper. En esta guía, se mostrarán los cambios necesarios para integrar esta biblioteca en una aplicación existente.

Nota: En este artículo, se describe la integración de la app para Android. Si usas Bubblewrap para compilar tu aplicación, podrás usar la herramienta para actualizarla. Se está haciendo un seguimiento de la implementación en Bubblewrap en este problema. Esta guía está destinada a quienes no usan Bubblewrap para actualizar su app.

build.gradle

La biblioteca de la extensión de facturación depende de la versión 2.1.0 de android-browser-helper. Asegúrate de que tu aplicación use una versión igual o superior a esa.

También deberás agregar una declaración de implementación para la biblioteca de la extensión de facturación:

dependencies {
    ...
    implementation 'com.google.androidbrowserhelper:androidbrowserhelper:2.1.0'
    implementation 'com.google.androidbrowserhelper:billing:1.0.0-alpha05'
}

DelegationService.java

android-browser-helper se envía con un DelegationService predeterminado que las apps pueden usar directamente. Cuando usas la extensión de facturación, necesitas una versión ligeramente personalizada de DelegationService.

Para ello, deberás crear tu propia clase DelegationService que extienda la original y anule onCreate(). Dentro de onCreate(), deberás agregar una sola llamada de método que registre la aplicación como un controlador para la API de Digital Goods:

package com.example.yourapp;

import com.google.androidbrowserhelper.playbilling.digitalgoods.DigitalGoodsRequestHandler;
import com.google.androidbrowserhelper.trusted.DelegationService;

public class DelegationService
        extends com.google.androidbrowserhelper.trusted.DelegationService {
    @Override
    public void onCreate() {
        super.onCreate();
        registerExtraCommandHandler(new DigitalGoodsRequestHandler(getApplicationContext()));
    }
}

AndroidManifest.xml

En el manifiesto de Android, deberás cambiar la referencia a la biblioteca de delegación por tu propia implementación. En la declaración service correspondiente, reemplaza com.google.androidbrowserhelper.trusted.DelegationService por la clase que acabas de crear.

<service
    android:name=".DelegationService"
    android:exported="true">

    <intent-filter>
        <action android:name="android.support.customtabs.trusted.TRUSTED_WEB_ACTIVITY_SERVICE"/>
        <category android:name="android.intent.category.DEFAULT"/>
    </intent-filter>
</service>

La biblioteca de facturación también presenta dos componentes nuevos que se deben agregar a tu manifiesto de Android: un servicio al que el navegador puede conectarse y verificar si la aplicación admite el pago, y una actividad que controla el flujo de pagos:

<activity
    android:name="com.google.androidbrowserhelper.playbilling.provider.PaymentActivity"
    android:theme="@android:style/Theme.Translucent.NoTitleBar"
    android:configChanges="keyboardHidden|keyboard|orientation|screenLayout|screenSize"
    android:exported="true">
    <intent-filter>
        <action android:name="org.chromium.intent.action.PAY" />
    </intent-filter>
    <meta-data
        android:name="org.chromium.default_payment_method_name"
        android:value="https://play.google.com/billing" />
</activity>
<!-- This service checks who calls it at runtime. -->
<service
    android:name="com.google.androidbrowserhelper.playbilling.provider.PaymentService"
    android:exported="true" >
    <intent-filter>
        <action android:name="org.chromium.intent.action.IS_READY_TO_PAY" />
    </intent-filter>
</service>

Más información sobre la API de Digital Goods y la Facturación Google Play

En este artículo, se trataron los pasos necesarios específicamente en la aplicación para Android que usa Trusted Web Activity, pero la API de Google Play Billing tiene su propia terminología e incluye componentes de cliente y backend. Te recomendamos que leas la documentación de la Facturación Google Play y la API de Digital Goods, y que comprendas sus conceptos antes de integrarla en una aplicación en producción.