我一直在尝试使用应用内支付构建一个 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 商店服务现在未连接 - 潜在的瞬态"(https://developer.android.com/reference/com/android/billingclient/api/BillingClient.BillingResponse(。我已经尝试了测试产品ID(android.test.purchased
(,以及我创建的真实产品ID,结果相同。我还重新启动了(物理(设备。我可以像往常一样访问Play商店应用程序,所以我无法弄清楚我在这里做错了什么。
我得到了同样的错误:
W/BillingClient(25145): Exception while launching billing flow: ; for sku: someSKU; try to reconnect
我的代码几乎完全基于 Google 的官方示例"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 和清单文件,看看它们是否也有这样的定义,但它们没有。哦,好吧。
如果你在一个活动中,你可以使用
Activity activity = this;
或者如果你在一个片段中,你可以使用
Activity activity = getActivity();
检查这是否有帮助