28

我正在尝试使用应用内计费:

mIabHelper = new IabHelper(this, BILLING_KEY);
        mIabHelper.startSetup(new IabHelper.OnIabSetupFinishedListener() {
            @Override
            public void onIabSetupFinished(IabResult result) {
                if (!result.isSuccess()) {
                    Log.d(TAG, "Problem setting up In-app Billing: " + result);
                }
            }
        });

并得到错误:

Problem setting up In-app Billing: IabResult: Billing service unavailable on device. (response: 3:Billing Unavailable)

为什么?试图清除 Play 商店的缓存,对我不起作用。

4

14 回答 14

43

好吧,如果没有太多信息,我们无法为您提供帮助。因此,如果您遗漏了什么,我会尝试为您做一个清单:

  1. 你是在模拟器上测试吗?计费服务应该在设备上测试,但是如果你真的要在模拟器上测试,确保模拟器安装并设置了谷歌播放。这非常重要!

  2. 您是否在清单中设置了正确的权限?(com.android.vending.BILLING)

  3. 如果您仍在测试应用程序,您是否从 playstore 获得了测试应用程序许可证,在您的 SDK 中导入了关卡,设置了您的许可证验证库?(您可以在此处跟随:设置

  4. 在您的活动 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 (!inappBillingHelper.handleActivityResult(requestCode, resultCode, data)) {
    super.onActivityResult(requestCode, resultCode, data);
  }
  else {
    Log.i(TAG, "onActivityResult handled by IABUtil.");
  }
}

还有更多信息可能会很有用,比如如果您正在模拟器或设备上进行测试,设备名称、android 版本等......

于 2013-04-11T11:22:19.780 回答
6

此错误表示您正在连接设备上的应用内结算服务,但该服务不支持 IAB 版本 3。可能是您设备的 Google Play 版本仅支持 IAB 版本 2。您的设备上运行的是哪个版本的 Google Play?

您的 Google Play 版本是否可以正常运行(例如,您可以打开 Google Play 商店)吗?有时,如果您设备上的日期已关闭,或者存在其他问题,Google Play 本身可能会出现问题。

最后,你的 logcat 输出中有什么?如果您提供更多详细信息,将更容易提供帮助。

于 2013-04-12T11:42:21.307 回答
5

在注册所有内容并设置 Google Play 商店之前安装应用程序时出现该错误。一旦我设置了 Google Play 商店帐户,错误就消失了。

于 2013-07-21T13:10:22.410 回答
4

擦拭帮了我。奇怪的错误。

于 2013-04-12T14:44:53.670 回答
4

尽管我使用的是 3.0 版的账单,但 2.0 版账单的文档实际上比 3.0 版更有帮助。

以下是 2.0 如何描述它的响应代码 3:

表示 In-app Billing 不可用,因为您指定的 API_VERSION 未被 Google Play 应用程序识别或用户不具备应用内结算资格(例如,用户居住在禁止应用内购买的国家/地区) .

对我来说,在测试之前,我必须先在手机上设置一个测试 Google 帐户。我忘记了那一步。一旦我这样做了,它就为我解决了......

在此处查找服务器响应代码:

http://developer.android.com/google/play/billing/v2/billing_reference.html

http://developer.android.com/google/play/billing/billing_reference.html

于 2014-01-20T18:21:37.493 回答
3

我发现了一个需要解决的问题,使用 LuckyPatcher 尝试 root,打开 config Toggles -> Disable billing。

在此处输入图像描述

于 2015-06-28T01:01:38.713 回答
2

当我从手机中删除所有 Google 帐户时,我确实遇到了这个错误(因此擦除修复,因为擦除后你可能会在手机重启后设置一个帐户)。

添加帐户后,我没有看到此错误。

相关问题InApp 购买中出现此错误代码 3 的可能性有哪些?.

于 2016-02-26T14:34:31.040 回答
1

有同样的问题。

我的设备已使用无法自我更新的旧版 Google Market 植根和 ROM。您可以通过在 AppManager 中查看来验证您的 Market/Play 版本。

我实际上决定使用另一台设备,但我想否则我将不得不找到一种方法来升级 Market/Play 版本。

于 2013-07-02T10:07:13.660 回答
1

我从擦除 Google Play 缓存中得到了这个错误。您必须重新打开 Google Play 应用并接受条款,然后它才能再次适用于 IAB。

于 2014-07-09T15:02:43.777 回答
0

这是因为当前登录设备的帐户未在 Google Developer Console 中注册。要解决此问题, 1. 转到您的 Google Developer Console 2. 在“帐户详细信息”选项卡中,在“具有测试访问权限的 Gmail 帐户”中输入电子邮件地址(位于设备中),然后按顶部的保存按钮。

就是这样。

于 2014-02-22T14:16:21.480 回答
0

就我而言,我为 serviceIntent.setPackage("com.android.vending"); 设置了不同的值。来自 IabHelper。确保将其保留为该值

于 2015-07-29T17:21:28.937 回答
0

我有同样的错误,然后注意到我的手机处于飞行模式!一旦连接恢复,我就可以走了。

于 2016-02-07T01:02:23.417 回答
0

IabHelper.java

Intent serviceIntent = new Intent("com.android.vending.billing.InAppBillingService.BIND");
serviceIntent.setPackage("com.android.vending");

如果无法正确指定 action 和 packageName 为IInAppBillingService.aidl.

于 2016-02-08T10:59:20.997 回答
0

已经想出了解决办法。

请尝试以下 3 个步骤:

  1. 清除 GooglePlay 应用和 Google Play 服务应用的缓存。
  2. 删除 IInAppBillingService.aidl 文件。
  3. 再次从 sdk 文件夹中复制上述文件并将其粘贴到我的应用程序中的aidl 文件夹中。

当我们将aidl文件从一个项目复制到另一个项目时,通常会出现这个问题。

于 2016-05-22T14:10:37.160 回答