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

André Cipriani Bandarra
André Cipriani Bandarra

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

Chrome 88 se lanzará con una prueba de origen en Android que permite la integración de Trusted Web Activities con la API Payment Request y la Digital Goods API 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.

A fin de facilitar la integración en la app para Android, el equipo de Trusted Web Activity presentó 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 explica la integración de la app para Android. Si usas Bubblewrap para compilar tu aplicación, podrás usar la herramienta a fin de actualizarla. Se está realizando un seguimiento de la implementación en Bubblewrap en este problema. Esta guía está dirigida a quienes no usen Bubblewrap para actualizar su app.

build.gradle

La biblioteca de extensiones 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.

También deberás agregar una declaración de implementación para la biblioteca de extensiones 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 de forma directa. 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 en 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 deberás agregar al manifiesto de Android: un Service al que se puede conectar el navegador para verificar si la aplicación admite el pago y una Activity que controla el flujo de pago en sí:

<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 abordan 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 y, además, incluye componentes de cliente y de 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.