Skip to content

Latest commit

 

History

History
145 lines (103 loc) · 12.6 KB

File metadata and controls

145 lines (103 loc) · 12.6 KB

Google Play Billing Library 1.0发布

原标题:Google Play Billing Library 1.0 released
链接:https://android-developers.googleblog.com/2017/09/google-play-billing-library-10-released.html
作者:Neto Marin (开发者倡导者)
翻译:arjinmc

6月份,我们宣布新开发者预览的Google Play Billing Library。 今天,我们很高兴地宣布Play Billing Library 1.0的正式发行。该库简化了Google Play帐单开发流程,让你将精力集中在你的应用上。

感谢你的宝贵意见和建议,帮助我们做到1.0版本。观看下面的视频,以快速了解库的功能。

视频介绍

在你开始之前

通过Play帐单,你可以通过他们信任的支付系统来收到来自全球用户的付款,你可以利用Play控制台中的功能和报告来管理和赚取更多收入。

如果你从未在应用程序中实施应用内结算,或者你想知道使用Play Billing Library可以提供的内容,请阅读应用内结算概述,以熟悉概念和术语,使你更容易实现应用内结算 - 使用Play Billing Library进行。

入门

Play Billing Library可通过Maven库获得,并将Play Billing Library添加到你的项目中很简单,因为将以下依赖关系添加到应用程序的build.gradle文件中:

dependencies {
    ...
    compile 'com.android.billingclient:billing:1.0'
}

Play Billing Library 1.0自动将com.android.vending.BILLING权限添加 到你的APK。 这意味着你不再需要手动将其包含在应用程序模块的manifest中。

BillingClient和PurchasesUpdatedListener

这些类是将库整合到Android应用程序中最重要的部分。 这BillingClient是你的应用和Google Play之间的桥梁。 你将使用它来列出可用的产品,启动应用内商品或订阅(即打开付款界面),获取用户购买以及创建或修改订阅的结算流程。

创建BillingClient实例时,你需要设置一个PurchasesUpdatedListener。 这样,你的应用可以从应用内结算API接收更新,包括结算流程之后的交易结果,以及在你的应用之外完成的购买,例如用户兑换促销代码或在另一台设备上购买产品。

以下代码演示如何重写你的PurchasesUpdatedListeneronPurchasesUpdated() 方法:

@Override
void onPurchasesUpdated(@BillingResponse int responseCode,
        List<Purchase> purchases) {
    if (responseCode == BillingResponse.OK
            && purchases != null) {
        for (Purchase purchase : purchases) {
            handlePurchase(purchase);
        }
    } else if (responseCode == BillingResponse.USER_CANCELED) {
        // Handle an error caused by a user canceling the purchase flow.
    } else {
        // Handle any other error codes.
    }
}

你可以根据应用程序的架构,在你的Activity或任何其他类中实现PurchasesUpdatedListener。这里是创建BillingClient实例的代码,并设置PurchasesUpdatedListener

mBillingClient = BillingClient.newBuilder(mContext)
                              .setListener(mPurchasesUpdatedListener)
                              .build();

呈现和销售商品

要在你的应用程序中销售产品,首先,你需要使用Play控制台添加它们。有关如何添加应用内商品的更多详细信息,请参阅管理应用内结算页面。

注意:如果这是一个全新的应用程序,在添加产品之前,你必须将其发布到Alpha或Beta版本的分发渠道。有关详细信息,请参阅草稿应用程序不再受支持。 (( 要获取当前用户的价格的产品详细信息列表,请调用querySkuDetailsAsync()。你还必须实现指定的SkuDetailsResponseListener接口。然后,你可以覆盖在onSkuDetailsResponse()查询完成时通知侦听器的方法,如以下示例代码所示:

List<String> skuList = new ArrayList<> ();
skuList.add("premiumUpgrade");
skuList.add("gas");
SkuDetailsParams.Builder params = SkuDetailsParams.newBuilder();
params.setSkusList(skuList).setType(SkuType.INAPP);
mBillingClient.querySkuDetailsAsync(params.build(),
    new SkuDetailsResponseListener() {
        @Override
        public void onSkuDetailsResponse(SkuDetailsResult result) {
            // Process the result.
        }
    })

用户选择购买产品后,你需要开始计费流程并处理交易结果。 要从你的应用程序开始购买请求,请调用Play Billing Library cleint的launchBillingFlow()方法。你必须从UI线程调用launchBillingFlow()方法(和BillingClient所有的其他方法)。

launchBillingFlow()方法需要包含用于完成购买的相关数据的BillingFlowParams对象,例如要购买的商品的产品ID和产品类型(在这种情况下SkuType.INAPP)。要获取一个实例BillingFlowParams,使用newBuilder()方法构造它:

BillingFlowParams.Builder builder = BillingFlowParams
                                       .newBuilder()
                                       .setSku(skuId).setType(SkuType.INAPP);
int responseCode = mBillingClient.launchBillingFlow(builder.build());

如前所述,事务结果将被发送到该onPurchasesUpdated()方法。有关如何处理收到的数据onPurchasesUpdated()以及如何处理购买的详细信息,请参阅我们的培训指南中的购买项目

消费产品

默认情况下,所有应用内商品都被管理。这意味着Google Play追踪产品所有权,不允许多次购买。为了能够再次购买产品,你必须在产品再次使用之前消费。

为用户可能想要多次购买的应用内商品实施消费,例如游戏中的货币或设备是常见的。你通常不想为用户购买一次并提供永久性效果(如高级升级)的应用内商品实施消费。

要使用产品,请在Play Billing Library client上调用consumeAsync()方法,并传入purchaseToken购买时返回的String值。消费结果通过 接口ConsumeResponseListeneronConsumeResponse()方法返回,你必须覆盖以处理消费结果。

以下示例说明使用purchaseToken相关联的消费产品:

ConsumeResponseListener listener = new ConsumeResponseListener() {
    @Override
    public void onConsumeResponse(@BillingResponse int responseCode, 
                                  String outToken) {
        if (responseCode == BillingResponse.OK) {
            // Handle the success of the consume operation.
            // For example, increase the number of player's coins,
            // that provide temporary benefits
        }
    }
};
mBillingClient.consumeAsync(purchaseToken, listener);

示例更新:Trivial Drive V2

随着一个新的库来了一个更新的示例! 为了帮助你了解如何使用新的Play Billing Library在你的应用中实施应用内结算,我们从头改写了Trivial Drive示例。

自从我们在2013年发布了Trivial Drive之后,许多新的功能,设备和平台已被添加到Android生态系统。 为了反映这种演变,Trivial Drive v2示例现在可以在Android TV和Android Wear上运行。

下一步是什么?

在你的应用程序集成之前,你可以尝试使用Google I / O 2017中发布的codelab播放计费库:购买并订阅:通过Google Play使你的应用程序获利

在这个codelab中,你将从简单版本的Trivial Drive V2开始,让用户“驱动”,然后你将添加应用内结算。你将学习如何集成采购和订阅以及开发可靠的应用程序处理购买的最佳实践。

在Android开发者网站上获取有关Play Billing Library的更多信息以及类和方法文档的官方参考。有关在项目中实施Play Billing Library的分步指南,请访问库的培训课程

我们仍然希望你的反馈

如果你有任何问题或疑问,请在Google问题跟踪器上提交bug报告,以及关于示例的问题和建议(如错误或新增功能),请访问Trivial Drive主题页面。

有关实施,库使用和最佳实践的技术问题,你可以使用StackOverflow上的google-playplay-billing-libraries标签,或访问我们的Google+信息页上的社区