在您的 Trusted Web Activity 中使用 Play 结算服务

除了让您的应用能够在 Play 商店中销售数字商品和订阅之外,Google Play 结算还提供用于管理目录、价格和订阅的工具、实用报告,以及由 Play 商店提供支持且用户已熟悉的结账流程。对于在 Play 商店上架并销售数字商品的应用,也必须满足此要求。

Chrome 88 在 Android 上发布时将提供源代码试用版,可将可信 Web 活动Payment Request APIDigital Goods API 集成,以便通过 Google Play 结算服务实现购买流程。我们预计此源试用也将面向 ChromeOS 89 版推出。

为了简化与 Android 应用的集成,Trusted Web Activity 团队将向 android-browser-helper 引入一个扩展库。本指南将介绍将此库集成到现有应用时需要进行的更改。

注意:本文介绍了 Android 应用的集成。如果您使用 Bubblewrap 构建应用,则可以使用该工具更新应用。我们正在通过此问题跟踪 Bubblewrap 上的实现。本指南适用于使用 Bubblewrap 更新应用的开发者。

build.gradle

结算扩展库本身依赖于 android-browser-helper2.1.0 版本。确保您的应用使用的版本不低于该版本。

您还需要为结算扩展程序库添加实现声明:

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

DelegationService.java

android-browser-helper 附带一个默认的 DelegationService,可供应用直接使用。使用结算扩展程序时,您需要稍微自定义 DelegationService 的版本。

为此,您需要创建自己的 DelegationService 类,该类会扩展原始类并替换 onCreate()。在 onCreate() 中,您需要添加一个方法调用,将应用注册为 Digital Goods API 的处理脚本:

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

在 Android 清单中,您需要将对委托库的引用更改为您自己的实现。在相应的 service 声明中,将 com.google.androidbrowserhelper.trusted.DelegationService 替换为您新创建的类。

<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>

结算库还引入了两个需要添加到 Android 清单中的新组件:一个可供浏览器连接并检查应用是否支持付款的服务,以及一个用于处理付款流程本身的activity

<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>

详细了解 Digital Goods API 和 Google Play 结算服务

本文介绍了使用可信 Web 活动的 Android 应用需要执行的具体步骤,但 Google Play Billing API 有自己的术语,并且包含客户端和后端组件。我们强烈建议您先阅读 Google Play 结算Digital Goods API 文档,了解相关概念,然后再将其集成到正式版应用中。