我正在将我的应用程序中的应用程序内结算从版本 3升级到更新的代码。版本 3 工作正常,现在在我的应用程序中生成,但我已经读到它最终将被弃用。
当我尝试使用静态产品 id (android.test.purchased)测试购买流程时,BillingResult结果代码仅返回 -1 并带有“服务连接已断开”的调试消息。AFAIK,较新的库中没有服务连接,但版本 3 中有。
如果我使用真正的应用内产品代码,它会告诉我我已经购买了它,这是正确的,但我需要测试实际的购买流程。
我正在实际设备(Pixel 3 XL)上测试此功能,而不是模拟器。我尝试在使用测试帐户(不是开发人员)登录的单独设备上对其进行测试,但得到了相同的结果。
更新:我在开发人员控制台中设置了一个真实的(测试)应用内托管产品,然后在使用测试(非开发人员)帐户登录的设备上安装了我的应用程序,但我仍然收到“服务连接是已断开”错误。我觉得这是代码之外的东西,但不确定是什么。
更新 2:我创建了一个新项目,除了计费代码之外什么都没有,并且它有效,所以我的应用程序中有一些东西导致它崩溃。
更新 3:我创建了一个新项目并将代码从损坏的应用程序导入到其中,但仍然收到相同的错误消息。我觉得,现在,我的包名称和 Google 服务器返回了错误消息。
更新 4:我创建了一个空白项目,但给它提供了与我损坏的应用程序相同的包名称,并且计费正常,所以它不是包名称。现在我的猜测是旧的 AIDL 计费代码(版本 3)中存在一些干扰。
解决方案!!!在我有这个application节点: 。删除了该属性,现在可以进行计费了。AndroidManifest.xmltools:node="replace"
mBillingClient = BillingClient.newBuilder(this).enablePendingPurchases().setListener(this).build();
mBillingClient.startConnection(new BillingClientStateListener() {
@Override
public void onBillingSetupFinished(BillingResult billingResult) {
if (billingResult.getResponseCode() == OK) {
final Purchase.PurchasesResult purchasesResult = mBillingClient.queryPurchases(BillingClient.SkuType.INAPP);
if (purchasesResult.getResponseCode() == OK) {
final List<Purchase> purchases = purchasesResult.getPurchasesList();
for (final Purchase purchase : purchases) {
}
} …Run Code Online (Sandbox Code Playgroud) The issue is my webpack config uses CommonJS syntax but main code is written in ES6. However based on the tutorials I have seen online, that seems to be the typical setup. So while the error is obvious, I am unable to determine why is this not working out for me? I would prefer to use CommonJS for webpack because of that is what the documentation uses. But I would like to use ES6 for the code.
My configuration is …