Android BillingClient错误:"启动计费流程时出现异常:; sku为:android.test.purchased; 尝试重新连接"

6

我一直在尝试构建一个带有应用内付款的Android应用程序,但设置起来有困难。 我正在调用以下内容:

      Activity activity = new Activity();
      billingClient = BillingClient.newBuilder(this).setListener(this).build();
      billingClient.startConnection(new BillingClientStateListener() {
          @Override
          public void onBillingSetupFinished(@BillingResponse int billingResponseCode) {
              if (billingResponseCode == BillingResponse.OK) {
                  List<String> skuList = new ArrayList<> ();
                  skuList.add("android.test.purchased");
                  SkuDetailsParams.Builder params = SkuDetailsParams.newBuilder();
                  params.setSkusList(skuList).setType(SkuType.INAPP);
                  billingClient.querySkuDetailsAsync(params.build(),
                          (responseCode, skuDetailsList) -> {
                              if (responseCode == BillingResponse.OK
                                      && skuDetailsList != null) {
                                  for (SkuDetails skuDetails : skuDetailsList) {
                                      System.out.println("The price is "+skuDetails.getPrice());
                                      BillingFlowParams flowParams = BillingFlowParams.newBuilder().setSkuDetails(skuDetails).build();
                                      int code = billingClient.launchBillingFlow(activity,flowParams);
                                      System.out.println("Code is: "+code);
                                  }
                              }
                          });
              }
          }
          @Override
          public void onBillingServiceDisconnected() {
              System.out.print("Billing disconnected?");
          }
      });

当我运行这段代码时,返回值是-1,并且出现了错误:Exception while launching billing flow: ; for sku: android.test.purchased; try to reconnect。我发现错误代码-1表示:“Play Store服务未连接 - 可能是短暂状态”(https://developer.android.com/reference/com/android/billingclient/api/BillingClient.BillingResponse)。我尝试使用测试产品ID(android.test.purchased)以及我自己创建的真实产品ID,但结果相同。我还尝试重启(物理)设备,但问题依然存在。我可以正常访问Play Store应用程序,因此无法找出错误所在。
2个回答

10

我遇到了同样的错误:

W/BillingClient(25145): Exception while launching billing flow: ; for sku: someSKU; try to reconnect

我的代码几乎完全基于官方谷歌的示例 "TrivialDrive_v2",使用计费库版本 1.2.2。我的主活动扩展了 NativeActivity。这个没有帮助。经过一天的寻找可能的原因后,我无计可施。

在查看日志时,我偶然注意到以下消息:

I/ActivityManager(962): START u0 {cmp=com.mypackage.myapp/com.android.billingclient.api.ProxyBillingActivity (has extras)} from uid 10116 on display 0

这个消息没有错,只是一个信息,但就在该消息之后出现了错误。因此,我搜索了 "ProxyBillingActivity" 并找到了这个。出于好奇,我添加了以下定义:

<activity
    android:name="com.android.billingclient.api.ProxyBillingActivity"
    android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation"
    android:theme="@android:style/Theme.Translucent.NoTitleBar" />

将其添加到我的清单文件中,然后哇!账单工作了。然后我搜索了整个“TrivialDrive_v2”示例源代码以及所有xml和清单文件,看看它们是否也有这样的定义,但它们没有。噢好吧。


太棒了!这正是解决我的问题的方法...谢谢! - Dave Nottage

0

如果您正在一个活动中,您可以直接使用以下代码:

Activity activity = this;

或者如果你在一个Fragment中,你可以使用

Activity activity = getActivity();

请检查这是否有帮助


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接