Google Play 结算库发行说明

本文档包含 Google Play 结算库的发行说明。

Google Play 结算库 7.1.1 版发布 (2024-10-03)

Google Play 结算库和 Kotlin 扩展程序的 7.1.1 版现已推出。

错误修复

Google Play 结算库 7.1.0 版发布 (2024-09-19)

Google Play 结算库和 Kotlin 扩展程序的 7.1.0 版现已推出。

更改摘要

  • 改进了与连接状态和管理相关的线程安全性。
  • 引入了测试 BillingResult 响应代码的部分更改,该更改将在 Play 结算库 7.1.1 中完全发布。要使用此功能测试您的集成,您需要升级到 Play 结算库 7.1.1。存在一个错误,只会影响启用了 结算覆盖测试 的应用程序,并且不会影响常规使用。有关更多信息,请参阅 测试 BillingResult 响应代码

Google Play 结算库 7.0.0 版发布 (2024-05-14)

Google Play 结算库和 Kotlin 扩展程序的 7.0.0 版现已推出。

更改摘要

Google Play 结算库 6.2.1 版本发布 (2024-04-16)

Google Play 结算库 6.2.1 版本和 Kotlin 扩展现已可用。

更改摘要

Google Play 结算库 6.2.0 版本发布 (2024-03-06)

Google Play 结算库 6.2.0 版本和 Kotlin 扩展现已可用。

更改摘要

Google Play 结算库 6.1.0 版本发布 (2023-11-14)

Google Play 结算库 6.1.0 版本和 Kotlin 扩展现已可用。

更改摘要

Google Play 结算库 6.0.1 版本发布 (2023-06-22)

Google Play 结算库 6.0.1 版本和 Kotlin 扩展现已可用。

更改摘要

更新 Play 结算库以使其与 Android 14 兼容。

Google Play 结算库 6.0 版本发布 (2023-05-10)

Google Play 结算库 6.0.0 版本和 Kotlin 扩展现已可用。

更改摘要

  • 添加了新的 ReplacementMode 枚举以替换 ProrationMode

    请注意,出于向后兼容性的原因,ProrationMode 仍然可用。

  • 已移除 PENDING 购买的订单 ID。

    以前,即使购买处于挂起状态,也会始终创建订单 ID。从 6.0.0 版本开始,不会为挂起的购买创建订单 ID,并且对于这些购买,订单 ID 将在购买状态变为 PURCHASED 后填充。

  • 已移除 queryPurchaseslaunchPriceConfirmationFlow 方法。

    先前已标记为弃用的 queryPurchaseslaunchPriceConfirmationFlow 方法现已在 Play 结算库 6.0.0 中移除。开发者应使用 queryPurchasesAsync 代替 queryPurchases。有关 launchPriceConfirmationFlow 的替代方案,请参阅 价格变化

  • 添加了新的网络错误响应代码。

    从 PBL 6.0.0 版本开始,添加了一个新的网络错误响应代码 NETWORK_ERROR。当由于网络连接问题发生错误时,会返回此代码。这些网络连接错误以前报告为 SERVICE_UNAVAILABLE

  • 更新了 SERVICE_UNAVAILABLESERVICE_TIMEOUT

    从 PBL 6.0.0 版本开始,由于处理超时而导致的错误将返回 SERVICE_UNAVAILABLE,而不是当前的 SERVICE_TIMEOUT

    在早期版本的 PBL 中,行为不会发生变化。

  • 已移除 SERVICE_TIMEOUT

    从 PBL 6.0.0 版本开始,将不再返回 SERVICE_TIMEOUT。早期版本的 PBL 仍将返回此代码。

  • 添加了其他日志记录。

    Play 结算库 6 版本包含其他日志记录,这些日志记录提供了对 API 使用情况(例如成功和失败)以及服务连接问题的洞察。此信息将用于提高 Play 结算库的性能并为错误提供更好的支持。

Google Play 结算库 5.2.1 版本发布 (2023-06-22)

Google Play 结算库 5.2.1 版本和 Kotlin 扩展现已可用。

更改摘要

更新 Play 结算库以使其与 Android 14 兼容。

Google Play 结算库 5.2 版本发布 (2023-04-06)

Google Play 结算库 5.2.0 版本和 Kotlin 扩展现已可用。

更改摘要

Google Play 结算库 5.1 版本发布 (2022-10-31)

Google Play 结算库 5.1.0 版本和 Kotlin 扩展现已可用。

此版本包含以下更改。

更改摘要

Google Play 结算库 5.0 版本发布 (2022-05-11)

Google Play 结算库 5.0.0 版本和 Kotlin 扩展现已可用。

此版本包含以下更改。

更改摘要

  • 引入了订阅的新模型,包括允许您为单个订阅产品创建多个优惠的新实体。有关更多信息,请参阅 迁移指南
  • 添加了 BillingClient.queryProductDetailsAsync() 以替换 BillingClient.querySkuDetailsAsync()
  • 添加了 setIsOfferPersonalized() 方法以满足欧盟个性化定价披露要求。要详细了解如何使用此方法,请参阅 指示个性化价格
  • 已移除先前已弃用的 queryPurchases(),并将其替换为 Google Play 结算库 4.0.0 中引入的 queryPurchasesAsync。
  • launchPriceChangeFlow 已弃用,将在未来的版本中移除。要详细了解替代方案,请参阅 启动价格更改确认流程

  • 已移除 setVrPurchaseFlow(),该方法之前用于实例化购买流程。在之前的版本中,此方法会将用户重定向到其 Android 设备上完成购买。移除此方法后,用户将通过标准购买流程完成购买。

Google Play 结算库 4.1 版发布 (2022-02-23)

Google Play 结算库 4.1.0 版及其 Kotlin 扩展现已推出。

此版本包含以下更改。

更改摘要

Google Play 结算库 4.0 版发布 (2021-05-18)

Google Play 结算库 4.0.0 版及其 Kotlin 扩展现已推出。

更改摘要

Google Play 结算库 3.0.3 版发布 (2021-03-12)

Google Play 结算库 3.0.3 版、Kotlin 扩展和 Unity 插件现已推出。

Java 和 Kotlin 错误修复

  • 修复了调用 endConnection() 时出现的内存泄漏。
  • 修复了使用单任务启动模式的应用使用 Google Play 结算库时出现的问题。当应用从 Android 启动器恢复,并且结算对话框在暂停之前可见时,将触发 onPurchasesUpdated() 回调。

Unity 错误修复

  • 更新到 Java 3.0.3 版以修复内存泄漏并解决当应用从 Android 启动器恢复,并且结算对话框在暂停之前可见时阻止购买的问题。

Google Play 结算库 3.0.2 版发布 (2020-11-24)

Google Play 结算库 3.0.2 版及其 Kotlin 扩展现已推出。

错误修复

  • 修复了 Kotlin 扩展中协程出现错误“已恢复”的问题。
  • 修复了在 Kotlin 扩展与 kotlinx.coroutines 库 1.4+ 版一起使用时出现的未解析引用。

Google Play 结算库 3.0.1 版发布 (2020-09-30)

Google Play 结算库 3.0.1 版及其 Kotlin 扩展现已推出。

错误修复

  • 修复了一个错误,即如果应用在结算流程期间被杀死并恢复,PurchasesUpdatedListener 可能不会使用购买结果进行调用。

Google Play 结算库 3.0 版发布 (2020-06-08)

Google Play 结算库 3.0.0 版、Kotlin 扩展和 Unity 插件现已推出。

更改摘要

  • 已移除奖励型 SKU 支持。
  • 已移除 ChildDirectedUnderAgeOfConsent 参数。
  • 已移除已弃用的开发者有效负载方法。
  • 已移除已弃用的方法 BillingFlowParams.setAccountId()BillingFlowParams.setDeveloperId()
  • 已移除已弃用的方法 BillingFlowParams.setOldSkus(String oldSku)BillingFlowParams.addOldSku(String oldSku)
  • 添加了可空性注释。

错误修复

Google Play 结算库 2.2.1 版发布 (2020-05-20)

Google Play 结算库 2.2.1 版现已推出。

错误修复

  • 更新了 Kotlin 扩展依赖的 Java Play 结算库的默认版本。

Google Play 结算库 2.2.0 版发布及 Unity 支持 (2020-03-23)

Google Play 结算库 2.2.0 版提供了帮助开发者确保购买归因于正确用户的功能。这些更改取代了基于开发者有效负载构建自定义解决方案的需求。作为此更新的一部分,开发者有效负载功能已弃用,并将在未来版本中移除。有关更多信息(包括建议的替代方案),请参阅 开发者有效负载

适用于 Unity 的 Google Play 结算库 2

除了 Google Play 结算库 2 的当前 Java 和 Kotlin 版本外,我们还发布了适用于 Unity 的库版本。使用 Unity 应用内购买 API 的游戏开发者现在可以升级以利用所有 Google Play 结算库 2 功能,并使后续升级到 Google Play 结算库的未来版本变得更容易。

要了解更多信息,请参阅 使用 Google Play 结算库与 Unity

更改摘要

Google Play 结算库 2.1.0 版发布及 Kotlin 扩展 2.1.0 版发布 (2019-12-10)

Google Play 结算库 2.1.0 版和新的 Kotlin 扩展现已推出。Play 结算库 Kotlin 扩展提供了 Kotlin 使用的惯用 API 替代方案,具有更好的空安全性以及协程。有关代码示例,请参阅 使用 Google Play 结算库

此版本包含以下更改。

更改摘要

  • BillingFlowParams 中,已弃用 setOldSku(String oldSku) 并替换为 setOldSku(String oldSku, String purchaseToken),以区分设备上多个帐号拥有相同 SKU 的情况。

Google Play 结算库 2.0.3 版发布 (2019-08-05)

Google Play 结算库 2.0.3 版现已推出。

错误修复

  • 修复了一个错误,即 querySkuDetailsAsync() 偶尔会使用代码 DEVELOPER_ERROR 失败,而不是返回成功的结果。

Google Play 结算库 2.0.2 版发布 (2019-07-08)

Google Play 结算库 2.0.2 版现已推出。此版本包含对参考文档的更新,并且不会更改库功能。

Google Play 结算库 2.0.1 版发布 (2019-06-06)

Google Play 结算库 2.0.1 版现已推出。此版本包含以下更改。

错误修复

  • 修复了一个错误,即在某些情况下调试消息会作为 null 返回。
  • 修复了一个潜在的内存泄漏问题。

Google Play 结算库 2.0 版发布 (2019-05-07)

Google Play 结算库 2.0 版现已推出。此版本包含以下更改。

必须在三天内确认购买

Google Play 支持在应用内(应用内购买)或应用外(应用外购买)购买产品。为了确保用户无论在哪里购买您的产品都能获得一致的购买体验,您必须在授予用户权限后尽快确认通过 Google Play Billing 库收到的所有购买请求。如果您未在三天内确认购买请求,用户将自动获得退款,并且 Google Play 会撤销购买。对于待处理交易(2.0 版新增功能),三天窗口从购买状态变为PURCHASED时开始,并且在购买处于PENDING状态时不适用。

对于订阅,您必须确认任何具有新购买令牌的购买请求。这意味着所有初始购买、计划更改和重新注册都需要确认,但您无需确认后续续订。要确定购买是否需要确认,您可以检查购买中的确认字段。

Purchase 对象现在包含一个isAcknowledged() 方法,该方法指示购买是否已确认。此外,Google Play 开发者 API 包含Purchases.productsPurchases.subscriptions的确认布尔值。在确认购买之前,请务必使用这些方法来确定购买是否已确认。

您可以使用以下方法之一确认购买

  • 对于消耗型产品,请使用客户端 API 中的consumeAsync()
  • 对于未消耗的产品,请使用客户端 API 中的acknowledgePurchase()
  • 服务器 API 中也提供了一个新的acknowledge()方法。

BillingFlowParams.setSku() 已移除

在此版本中,之前已弃用的BillingFlowParams#setSku()方法已被移除。在购买流程中呈现产品之前,您现在必须调用BillingClient.querySkuDetailsAsync(),并将结果SkuDetails对象传递给BillingFlowParams.Builder.setSkuDetails()

有关代码示例,请参阅使用 Google Play Billing 库

开发者负载受支持

Google Play Billing 库 2.0 版增加了对开发者负载的支持,开发者负载是可以附加到购买请求的任意字符串。您可以将开发者负载参数附加到购买请求,但仅限在确认或消耗购买请求时。这与 AIDL 中的开发者负载不同,在 AIDL 中,可以在启动购买流程时指定负载。由于现在可以从应用外部启动购买请求,因此此更改可确保您始终有机会向购买请求添加负载。

要访问新库中的负载,Purchase对象现在包含一个getDeveloperPayload()方法。

一致的优惠

当您提供折扣 SKU 时,Google Play 现在会返回 SKU 的原始价格,以便您可以向用户显示他们正在享受折扣。

SkuDetails包含两个用于检索原始 SKU 价格的新方法

待处理交易

使用 Google Play Billing 库 2.0 版,您必须支持在授予权限之前需要额外操作的购买请求。例如,用户可能会选择在实体店使用现金购买您的应用内产品。这意味着交易是在应用外部完成的。在这种情况下,您应仅在用户完成交易后才授予权限。

要启用待处理购买请求,请在初始化应用时将enablePendingPurchases()作为一部分进行调用。

使用Purchase.getPurchaseState()确定购买状态是PURCHASED还是PENDING。请注意,您应仅在状态为PURCHASED时授予权限。您应该通过执行以下操作来检查Purchase状态更新

  1. 启动应用时,请调用BillingClient.queryPurchases()以检索与用户关联的未消耗产品的列表。
  2. 在每个返回的Purchase对象上调用Purchase.getPurchaseState()
  3. 实现onPurchasesUpdated()方法以响应Purchase对象的更改。

此外,Google Play 开发者 API 包含Purchases.productsPENDING状态。订阅不支持待处理交易。

此版本还引入了新的实时开发者通知类型OneTimeProductNotification。此通知类型包含一条消息,其值为ONE_TIME_PRODUCT_PURCHASEDONE_TIME_PRODUCT_CANCELED。此通知类型仅用于与延迟付款方式(如现金)关联的购买请求。

在确认待处理购买请求时,请确保仅在购买状态为PURCHASED而不是PENDING时确认。

API 更改

Google Play Billing 库 2.0 版包含一些 API 更改,以支持新功能并阐明现有功能。

consumeAsync

consumeAsync()现在接受ConsumeParams对象,而不是purchaseTokenConsumeParams包含purchaseToken以及可选的开发者负载。

此版本中已移除consumeAsync()的先前版本。

queryPurchaseHistoryAsync

为了最大程度地减少混淆,queryPurchaseHistoryAsync()现在返回PurchaseHistoryRecord对象,而不是Purchase对象。PurchaseHistoryRecord对象与Purchase对象相同,只是它仅反映queryPurchaseHistoryAsync()返回的值,并且不包含autoRenewingorderIdpackageName字段。请注意,返回的数据没有任何变化,queryPurchaseHistoryAsync()返回的数据与以前相同。

BillingResult 返回值

以前返回BillingResponse整数值的 API 现在返回BillingResult对象。BillingResult包含BillingResponse整数以及您可以用来诊断错误的调试字符串。调试字符串使用 en-US 语言环境,不应显示给最终用户。

错误修复

Google Play Billing 库 1.2.2 版 (2019 年 3 月 7 日)

Google Play Billing 库 1.2.2 版现已推出。此版本包含以下更改。

错误修复

  • 修复了 v1.2.1 中引入的线程问题。后台调用不再阻塞主线程。

其他更改

  • 尽管仍然建议使用主线程,但您现在可以从后台线程实例化 Google Play Billing 库。
  • 实例化已完全迁移到后台线程,以减少导致 ANR 的可能性。

Play Billing 库 1.2.1 版 (2019 年 3 月 4 日)

Google Play Billing 库 1.2.1 版现已推出。此版本包含以下更改。

主要更改

其他更改

  • PurchasesResultSkuDetailsResult 添加了公共构造函数,以便于测试。
  • SkuDetails 对象可以使用一个新方法 getOriginalJson()
  • 所有 AIDL 服务调用现在都由后台线程处理。

错误修复

  • 不再将空回调监听器传递到公共 API 中。

Google Play 结算库 1.2 版发布 (2018-10-18)

Google Play 结算库 1.2 版现已推出。此版本包含以下更改。

更改摘要

  • Google Play 结算库现在根据 Android 软件开发工具包许可协议 授权。
  • 添加了 launchPriceChangeConfirmationFlow API,该 API 会提示用户查看订阅价格的待定更改。
  • 在升级或降级用户的订阅时,添加了对新按比例分配模式 DEFERRED 的支持。
  • BillingFlowParams 类中,用 setSkuDetails() 替换了 setSku()
  • 次要错误修复和代码优化。

价格更改确认

您现在可以在 Google Play Console 中更改订阅的价格,并在用户进入您的应用时提示他们查看并接受新价格。

要使用此 API,请使用订阅产品的 skuDetails 创建一个 PriceChangeFlowParams 对象,然后调用 launchPriceChangeConfirmationFlow()。实现 PriceChangeConfirmationListener 以在价格更改确认流程完成后处理结果,如下面的代码片段所示

Kotlin

val priceChangeFlowParams = PriceChangeFlowParams.newBuilder()
    .setSkuDetails(skuDetailsOfThePriceChangedSubscription)
    .build()

billingClient.launchPriceChangeConfirmationFlow(activity,
        priceChangeFlowParams,
        object : PriceChangeConfirmationListener() {
            override fun onPriceChangeConfirmationResult(responseCode: Int) {
                // Handle the result.
            }
        })

Java

PriceChangeFlowParams priceChangeFlowParams =
        PriceChangeFlowParams.newBuilder()
    .setSkuDetails(skuDetailsOfThePriceChangedSubscription)
    .build();

billingClient.launchPriceChangeConfirmationFlow(activity,
        priceChangeFlowParams,
        new PriceChangeConfirmationListener() {
            @Override
            public void onPriceChangeConfirmationResult(int responseCode) {
                // Handle the result.
            }
        });

价格更改确认流程会显示一个包含新定价信息的对话框,要求用户接受新价格。此流程会返回类型为 BillingClient.BillingResponse 的响应代码。

新的按比例分配模式

在升级或降级用户的订阅时,您可以使用新的按比例分配模式 DEFERRED。此模式会在用户的订阅下次续订时更新订阅。要详细了解如何设置此按比例分配模式,请参阅 设置按比例分配模式

设置 SKU 详细信息的新方法

BillingFlowParams 类中,setSku() 方法已弃用。此更改旨在优化 Google Play 结算流程。

在应用内结算客户端中构造 BillingFlowParams 的新实例时,建议您直接使用 setSkuDetails() 使用 JSON 对象,如下面的代码片段所示

BillingFlowParams Builder 类中,setSku() 方法已弃用。改为使用 setSkuDetails() 方法,如下面的代码片段所示。传递给 setSkuDetails() 对象的对象来自 querySkuDetailsAsync() 方法。

Kotlin

private lateinit var mBillingClient: BillingClient
private val mSkuDetailsMap = HashMap<String, SkuDetails>()

private fun querySkuDetails() {
    val skuDetailsParamsBuilder = SkuDetailsParams.newBuilder()
    mBillingClient.querySkuDetailsAsync(skuDetailsParamsBuilder.build()
    ) { responseCode, skuDetailsList ->
        if (responseCode == 0) {
            for (skuDetails in skuDetailsList) {
                mSkuDetailsMap[skuDetails.sku] = skuDetails
            }
        }
    }
}

private fun startPurchase(skuId: String) {
    val billingFlowParams = BillingFlowParams.newBuilder()
    .setSkuDetails(mSkuDetailsMap[skuId])
    .build()
}

Java

private BillingClient mBillingClient;
private Map<String, SkuDetails> mSkuDetailsMap = new HashMap<>();

private void querySkuDetails() {
    SkuDetailsParams.Builder skuDetailsParamsBuilder
            = SkuDetailsParams.newBuilder();
    mBillingClient.querySkuDetailsAsync(skuDetailsParamsBuilder.build(),
            new SkuDetailsResponseListener() {
                @Override
                public void onSkuDetailsResponse(int responseCode,
                        List<SkuDetails> skuDetailsList) {
                    if (responseCode == 0) {
                        for (SkuDetails skuDetails : skuDetailsList) {
                            mSkuDetailsMap.put(skuDetails.getSku(), skuDetails);
                        }
                    }
                }
            });
}

private void startPurchase(String skuId) {
    BillingFlowParams billingFlowParams = BillingFlowParams.newBuilder()
            .setSkuDetails(mSkuDetailsMap.get(skuId))
            .build();
}

Play 结算库 1.1 版发布 (2018-05-07)

Google Play 结算库 1.1 版现已推出。此版本包含以下更改。

更改摘要

  • 添加了在升级/降级现有订阅时在 BillingFlowParams 中指定按比例分配模式的支持。
  • BillingFlowParams 中的 replaceSkusProration 布尔标志已不再受支持。改为使用 replaceSkusProrationMode
  • launchBillingFlow() 现在会为失败的响应触发回调。

行为更改

Google Play 结算库 1.1 版包含以下行为更改。

开发者可以在 BillingFlowParams 类中设置 replaceSkusProrationMode

ProrationMode 提供了有关在升级或降级用户的订阅时按比例分配类型的更多详细信息。

Kotlin

BillingFlowParams.newBuilder()
    .setSku(skuId)
    .setType(billingType)
    .setOldSku(oldSku)
    .setReplaceSkusProrationMode(replaceSkusProrationMode)
    .build()

Java

BillingFlowParams.newBuilder()
    .setSku(skuId)
    .setType(billingType)
    .setOldSku(oldSku)
    .setReplaceSkusProrationMode(replaceSkusProrationMode)
    .build();

目前,Google Play 支持以下按比例分配模式

IMMEDIATE_WITH_TIME_PRORATION 替换立即生效,新的到期时间将按比例分配并记入或记入用户的费用。这是当前的默认行为。
IMMEDIATE_AND_CHARGE_PRORATED_PRICE 替换立即生效,结算周期保持不变。将收取剩余时段的价格。

注意:此选项仅适用于订阅升级。

IMMEDIATE_WITHOUT_PRORATION 替换立即生效,新价格将在下次重复时间收取。结算周期保持不变。

replaceSkusProrationBillingFlowParams 类中不再受支持

开发者过去能够设置一个布尔标志来为订阅升级请求收取按比例分配的金额。鉴于我们支持 ProrationMode,其中包含更详细的按比例分配说明,因此不再支持此布尔标志。

launchBillingFlow() 现在会为失败的响应触发回调

结算库将始终触发 PurhcasesUpdatedListener 回调并异步返回 BillingResponse。也会保留 BillingResponse 的同步返回值。

错误修复

  • 在服务断开连接时,异步方法中会正确地提前退出。
  • Builder 参数对象不再修改已构建的对象。
  • 问题 68087141launchBillingFlow() 现在会为失败的响应触发回调。

Google Play 结算库 1.0 版发布 (2017-09-19,公告)

Google Play 结算库 1.0 版现已推出。此版本包含以下更改。

重要更改

  • 在库的清单中嵌入结算权限。不再需要在 Android 清单中添加 com.android.vending.BILLING 权限。
  • BillingClient.Builder 类中添加了新的构建器。
  • 引入了 SkuDetailsParams 类的构建器模式,用于在查询 SKU 的方法中使用。
  • 为了保持一致性,更新了几个 API 方法(相同的返回值名称和顺序)。

行为更改

Google Play 结算库 1.0 版包含以下行为更改。

BillingClient.Builder 类

BillingClient.Builder 现在通过 newBuilder 模式初始化

Kotlin

billingClient = BillingClient.newBuilder(context).setListener(this).build()

Java

billingClient = BillingClient.newBuilder(context).setListener(this).build();

launchBillingFlow 方法现在使用 BillingFlowParams 类调用

要为购买或订阅启动结算流程,launchBillingFlow() 方法会接收一个 BillingFlowParams 实例,该实例使用特定于请求的参数进行初始化

Kotlin

BillingFlowParams.newBuilder().setSku(skuId)
        .setType(billingType)
        .setOldSku(oldSku)
        .build()

// Then, use the BillingFlowParams to start the purchase flow
val responseCode = billingClient.launchBillingFlow(builder.build())

Java

BillingFlowParams.newBuilder().setSku(skuId)
                              .setType(billingType)
                              .setOldSku(oldSku)
                              .build();

// Then, use the BillingFlowParams to start the purchase flow
int responseCode = billingClient.launchBillingFlow(builder.build());

查询可用产品的新方法

queryPurchaseHistoryAsync()querySkuDetailsAsync() 方法的参数已包装到构建器模式中

Kotlin

val params = SkuDetailsParams.newBuilder()
params.setSkusList(skuList)
        .setType(itemType)
billingClient.querySkuDetailsAsync(params.build(), object : SkuDetailsResponseListener() {
    ...
})

Java

SkuDetailsParams.Builder params = SkuDetailsParams.newBuilder();
params.setSkusList(skuList)
        .setType(itemType);
billingClient.querySkuDetailsAsync(params.build(), new SkuDetailsResponseListener() {...})

为了方便起见,并且为了与我们的 API 保持一致,结果现在通过结果代码和 SkuDetails 对象列表返回,而不是以前的包装器类

Kotlin

fun onSkuDetailsResponse(@BillingResponse responseCode: Int, skuDetailsList: List<SkuDetails>)

Java

public void onSkuDetailsResponse(@BillingResponse int responseCode, List<SkuDetails> skuDetailsList)

onConsumeResponse() 方法的参数顺序已更改

onConsumeResponse(来自 ConsumeResponseListener 接口)的参数顺序已更改,以与我们的 API 保持一致

Kotlin

fun onConsumeResponse(@BillingResponse responseCode: Int, outToken: String)

Java

public void onConsumeResponse(@BillingResponse int responseCode, String outToken)

解包 PurchaseResult 对象

PurchaseResult 已解包,以与我们的 API 保持一致

Kotlin

fun onPurchaseHistoryResponse(@BillingResponse responseCode: Int, purchasesList: List<Purchase>)

Java

void onPurchaseHistoryResponse(@BillingResponse int responseCode, List<Purchase> purchasesList)

错误修复

开发者预览版 1 发布 (2017-06-12,公告)

开发者预览版推出,旨在简化结算方面的开发流程,使开发者能够专注于实现特定于 Android 应用的逻辑,例如应用架构和导航结构。

该库包含一些方便的类和功能,供您在将 Android 应用与 Google Play 结算 API 集成时使用。该库还在 Android 接口定义语言 (AIDL) 服务之上提供了一个抽象层,使开发者更容易定义应用与 Google Play 结算 API 之间的接口。