一次性商品的多商品

本文档介绍了如何将您的应用与 Play 结算库 (PBL) 的多件商品功能集成。

借助一次性商品 (OTP) 的多件商品功能,您可以将多个一次性商品组合成一个单元。然后,您可以统一购买、结算和管理这些捆绑商品。您还可以为这些捆绑的 OTP 创建 折扣优惠,以激励用户购买商品。

注意事项

创建一次性商品捆绑包时,请注意以下事项:

  • 一次性商品捆绑包中不能包含订阅。
  • 您不能在同一个一次性商品捆绑包中同时包含数字内容和服务。
  • 捆绑的一次性商品必须可供立即下载。 例如,一次性商品捆绑包不能包含预订购买,因为预订购买的商品无法立即下载。
  • 一次性商品的多件商品功能不支持 租用购买选项

与 Play 结算库集成

本部分假定您 熟悉初始 PBL 集成步骤,例如 将 PBL 依赖项添加到您的应用、初始化 BillingClient 以及连接到 Google Play。本部分重点介绍特定于多件 OTP 购买的 PBL 集成方面。

启动购买流程

如需为多件一次性商品启动购买流程,请执行以下步骤:

  1. 使用 QueryProductDetailsParams.Builder.setProductList 方法创建包含所有一次性商品的商品列表。

  2. 使用 BillingClient.queryProductDetailsAsync 方法提取所有一次性商品。

    以下示例展示了如何提取所有一次性商品:

    Java

    billingClient.queryProductDetailsAsync(
    queryProductDetailsParams,
    new ProductDetailsResponseListener() {
      public void onProductDetailsResponse(
          BillingResult billingResult, QueryProductDetailsResult productDetailsResult) {
        // check billingResult
        // …
        // process productDetailsList returned by QueryProductDetailsResult
        ImmutableList productDetailsList = productDetailsResult.getProductDetailsList();
        for (ProductDetails productDetails : productDetailsList) {
          for (OneTimePurchaseOfferDetails oneTimePurchaseOfferDetails :
              productDetails.getOneTimePurchaseOfferDetailsList()) {
                 // …
          }
        }
      }
    });
  3. 为每个一次性商品设置 ProductDetails 对象。

    ProductDetails
  4. BillingFlowParams.Builder.setProductDetailsParamsList 方法中指定一次性商品详情。 BillingFlowParams 类用于指定购买流程的详细信息。

    以下示例展示了如何为多件 OTP 购买启动结算流程:

    Java

    BillingClient billingClient =
       BillingClient.newBuilder()
        // set other options
        .build();
    // ProductDetails obtained from queryProductDetailsAsync().
    ProductDetails productDetails1 = ...;
    ProductDetails productDetails2 = ...;
    ArrayList productDetailsList = new ArrayList<>();
    productDetailsList.add(productDetails1);
    productDetailsList.add(productDetails2);
    BillingFlowParams billingFlowParams =
    BillingFlowParams.newBuilder()
        .setProductDetailsParamsList(productDetailsList)
        .build();
    billingClient.launchBillingFlow(billingFlowParams);

处理购买交易

处理多件 OTP 购买交易与处理现有 单件商品购买交易相同,如在 将 Google Play 结算库集成到您的应用中所述。 唯一的区别在于,对于多件 OTP 购买交易,您需要为所有 商品授予使用权,而不是仅为一件商品授予使用权,这样用户才能通过一次购买获得多项使用权。多件 OTP 购买交易会返回多个商品,您可以使用 Google Play 结算库中的 Purchase.getProducts() 检索这些商品,然后使用 Google Play Developer APIpurchases.products.get 中的 lineItems 列表检索这些商品。

实时开发者通知

对于多件 OTP 购买交易,RTDN 中未提供 sku 字段。 多件 OTP 购买交易表示多件商品。因此,您可以使用 Play Developer API 获取购买数据,并查看其中的所有商品。

退款

在多件 OTP 购买交易中,用户无法针对单件商品申请退款,您也无法针对单件商品办理退款。不过,您可以针对整个多件 OTP 购买交易申请和办理退款。如果您要为用户取消多件 OTP 购买交易,则与该购买交易关联的所有权限都将被取消。

财务报告和对账

使用“收入报告”将您的有效多件动态密码购买交易与 Google Play 上的付款和交易进行对账。每个交易明细项都有一个订单 ID。对于多件动态密码购买交易, “盈利”和“预计销售额”报告将为每项交易(例如扣款、 费用、税费和退款)分别列出单独的行 (具有相同的订单 ID),其中包含每件相关商品。

对于 Play 管理中心内的信息中心:

  • 控制中心的财务报告 部分中显示的收入统计信息按单件商品细分。

  • 订单管理会反映多件 OTP 购买交易,并显示所购商品的明细列表。在订单管理中,您可以撤消、取消或全额退款用户的购买交易。