Android In App Billing“设备上不提供计费服务。(响应:3:计费不可用)”

Jum*_*dle 5 android in-app-billing

我开发了一款Android游戏,该游戏在应用程序购买方面具有溢价,而且我可以在一段时间内正常工作。(该游戏处于Beta测试分支,用户可以购买高级升级罚款。)

几天前,我决定重写项目,以便可以稍微整理一下代码。一切似乎都正常。(Play游戏服务和AdMob广告仍然有效)但是,在应用程序计费中不再起作用。每次我的应用启动时,我都会收到一个错误消息:"Billing service unavailable on device. (response: 3:Billing Unavailable)"我到处搜索,发现很多人都遇到了这个问题,但是他们的回答都没有帮助我。

我试过了:

  • 清除Google Play应用的缓存,并通过启动该应用来接受条款。
  • 在我的手机上尝试多个用户。(所有这些都已添加到开发人员控制台的测试人员列表中。)
  • 在至少3个其他(无根)设备上进行测试。
  • 仔细检查"com.android.vending.BILLING"权限是否在清单文件中。
  • 使用相同的密钥库对我的新应用程序进行签名。
  • 为我的新项目使用相同的名称空间。
  • 尝试3种不同的Play商店版本。

这是我的iabHelper代码。

String base64EncodedPublicKey = "KEY HERE";

iabHelper = new IabHelper(this, base64EncodedPublicKey);
iabHelper.enableDebugLogging(true);
iabHelper.startSetup(new IabHelper.OnIabSetupFinishedListener() {
    @Override
    public void onIabSetupFinished(IabResult result) {
        if (!result.isSuccess()) {
            Log.e(TAG, "Problem setting up in-app billing: " + result.getMessage());
            return;
        }

        if (iabHelper == null) return;

        iabHelper.queryInventoryAsync(new IabHelper.QueryInventoryFinishedListener() {
            @Override
            public void onQueryInventoryFinished(IabResult result, Inventory inv) {
                if (iabHelper == null) return;

                if (result.isFailure()) {
                    Log.e(TAG, "Failed to query inventory: " + result);
                    return;
                }

                Purchase premiumPurchase = inv.getPurchase("premium");
                isPremium = (premiumPurchase != null);

                if (!premium())
                    loadInterstitial();
           }
        });
    }
});
Run Code Online (Sandbox Code Playgroud)

和我的onActivityResult代码

我敢肯定这没有正确完成,但是我认为这与该错误无关。(在调试时看到错误之前,甚至没有调用它。)

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    Log.i(TAG, "onActivityResult(" + requestCode + "," + resultCode + "," + data);

    // Pass on the activity result to the helper for handling
    if (!iabHelper.handleActivityResult(requestCode, resultCode, data)) {
        if (resultCode == GamesActivityResultCodes.RESULT_RECONNECT_REQUIRED)
            gameHelper.disconnect();
        gameHelper.onActivityResult(requestCode, resultCode, data);
        super.onActivityResult(requestCode, resultCode, data);
    } else {
        Log.i(TAG, "onActivityResult handled by IABUtil.");
    }
}
Run Code Online (Sandbox Code Playgroud)

我通常不喜欢寻求帮助,因为通常可以在线访问某个地方的答案。但是,我已经呆了几天了,而且已经把所有的头发都扯掉了。谢谢你尽你所能的帮助。

目前,我最好的猜测是我忘记从原始项目中复制某些内容,这会导致它失败,但是除了base64EncodedPublic密钥,我的密钥库和使用同一名称空间之外,我什么也没想到。我想念什么吗?