8

我有

BillingFlowParams purchaseParams = BillingFlowParams.newBuilder().setSku(skuId).setType(billingType).setOldSkus(oldSkus).build();

但现在

setSku

setType

setOldSkus

都已弃用。

我想更新旧代码而不发布与活动和未来订阅混淆的更新。我应该如何正确更新上述代码?

目前我使用 aString myProduct="my_newsweek_1"; 来识别购买和BillingClient.SkuType.SUBS识别类型,我只是传递nullsetOldSkus

文档报告说

setSku (String sku)setType (String type)已被替换为setSkuDetails(SkuDetails) (此SkuDetails对象在构造函数中仅接收Stringas 参数并抛出JSONException,因此似乎不适用于旧String常量)

setOldSkus(ArrayList<String> oldSkus)已被替换为setOldSku(String)

4

2 回答 2

1

您需要 BillingFlowParams 用于launchBillingFlow(). 您可以使用自己的 json 字符串创建 SkuDetails,但这不是预期的方式。您应该首先调用querySkuDetailsAsync()并获取必要的 skuDetailsList,然后将它们用于launchBillingFlow()


public void querySkuDetailsAsync(@SkuType final String itemType, final List<String> skuList, final SkuDetailsResponseListener listener) {
    Runnable queryRequest = new Runnable() {
        @Override
        public void run() {
            // Query the purchase async
            SkuDetailsParams.Builder params = SkuDetailsParams.newBuilder();
            params.setSkusList(skuList).setType(itemType);
            mBillingClient.querySkuDetailsAsync(params.build(),
                    new SkuDetailsResponseListener() {
                        @Override
                        public void onSkuDetailsResponse(int responseCode, List<SkuDetails> skuDetailsList) {
                            //use skuDetails in skuDetailsList
                        }
                    });
            }
        };
    executeServiceRequest(queryRequest);
}

public void initiatePurchaseFlow(final SkuDetails skuDetails) {
   Runnable purchaseFlowRequest = new Runnable() {
      @Override
      public void run() {
      Log.d(TAG, "Launching in-app purchase flow.");
      BillingFlowParams purchaseParams = BillingFlowParams.newBuilder().setSkuDetails(skuDetails).build();
         mBillingClient.launchBillingFlow(mActivity, purchaseParams);
      }
   };
   executeServiceRequest(purchaseFlowRequest);
}
于 2019-02-18T18:14:02.983 回答
0

将您的代码替换为下面的更新计费库版本

  mBillingFlowParams = BillingFlowParams.newBuilder()
                            .setSkuDetails(skuDetailsList.get(0))
                            .setSubscriptionUpdateParams(BillingFlowParams.SubscriptionUpdateParams.newBuilder()
                                .setOldSkuPurchaseToken(oldPurchaseToken)
                                .setReplaceSkusProrationMode(BillingFlowParams.ProrationMode.DEFERRED)
                                .build())
                            .build()
                        mBillingClient.launchBillingFlow(context, mBillingFlowParams)

于 2021-10-12T12:01:45.100 回答