此版本的应用程序未配置为通过Google Play结算

时间:2012-06-17 03:20:23

标签: android apk in-app-billing google-play

当我尝试使用应用内结算运行我的应用时,我收到错误消息:“此版本的应用程序未配置为通过Google Play结算。请查看帮助中心以获取更多信息”。

我已在清单文件中获得了结算权限,并且我已将已签名的.apk作为草稿上传到Google Play上,并且我已将同样已签名的apk安装到我的手机上。

有关如何解决此问题的任何帮助?

19 个答案:

答案 0 :(得分:297)

此错误可能由多种原因引起。

以下是Google IAB测试的要求列表。

先决条件:

  1. AndroidManifest必须包含“com.android.vending.BILLING”权限
  2. APK内置于发布模式
  3. 使用发布证书 签名。 (重要:使用“Google Play登录”,只有直接从GooglePlayStore下载才有效!)
  4. APK上传到 alpha / beta发布频道(之前 - 作为草稿)至少一次到开发者控制台。 (需要一些时间 ~2h-24h )。
  5. IAB 产品已发布,其状态设置为有效
  6. 在开发者控制台中添加了测试帐户。
  7. 测试要求:

    1. 测试APK与上传到开发者控制台的版本具有相同的版本
    2. 测试APK 已签名相同的证书与上传到dev.console的证书相同。
    3. 测试帐户(非开发者) - 是设备上的主帐户。 (主要帐户可能没有必要 - 根据@MinosL评论)
    4. 测试帐户已选择作为测试人员,并且已链接到有效的付款方式。 (@Kyone
    5. P.S:使用发布证书进行调试https://stackoverflow.com/a/15754187/1321401(链接的@dipp}

      P.P.S:已经很长时间才制作这份名单了。

      Thnx @zlgdev@Kyone@MinosL更新

答案 1 :(得分:184)

Ahh在尝试了几个小时后找到了解决方案。

  1. 谷歌需要一段时间来处理应用程序并将其更新到他们的服务器,对我而言需要大约半天时间。因此,在将Google版本保存为Google Play草稿后,您必须等待几个小时才能使应用内商品正常响应并允许定期购买。
  2. 导出并签名APK。未签名的APK尝试购买会收到错误。

答案 2 :(得分:130)

如果您发布的版本与您在手机上测试的版本不同,则会发生同样的情况。

例如,上传的版本为android:versionCode="1",您在手机上测试的版本为android:versionCode="2"

答案 3 :(得分:45)

您需要使用实时证书对APK进行签名。然后将其安装到您的测试设备上。然后,您可以测试InAppBilling。如果您通过eclipse直接运行到设备来测试应用程序(在调试模式下),那么您将收到此错误。

如果您使用android.test.purchased作为SKU,它将一直有效,但您不会在最终回复中使用developerPayload。

如果你在app项目中使用自己的草稿,你可以一直测试但是你会被收费,所以必须自己退还。

您无法使用与Google Play开发控制台相同的Gmail帐户购买商品。

答案 4 :(得分:14)

2021 年的结论

对于所有关心调试的人 - 您可以在调试模式下运行、调试和测试代码

以下是测试过程的方法:

(这当然取决于您已经添加并激活了您的产品,并且您的代码已准备好与这些产品集成)

  1. com.android.vending.BILLING添加到清单
  2. 上传签名的apk进行内部测试
  3. 添加许可证测试人员(Play console -> Settings -> License testing)- 如果您在设备上使用多个帐户并且不确定要使用哪个帐户使用,只需将他们全部添加为测试人员即可。
  4. 像往常一样从 Android Studio 运行应用程序(* 应用程序的版本代码应与您刚刚上传到内部测试的版本代码相同)

我做了上面的事情,它工作得很好。

答案 5 :(得分:14)

在开发者控制台中:

Settings-> Account details-> License Testing->具有测试访问权限的Gmail帐户

然后在此处输入您的帐户

答案 6 :(得分:10)

如果您从2018年开始在这里,则需要直接从Play商店下载APK并安装“衍生”APK。也许是因为Google的Play商店有一项功能“Google Play for Google Play”。

答案 7 :(得分:3)

让我加上发生在我身上的事情,可能会帮助一些人。

这主要是由于签约。

由于我在项目结构中添加了签名详细信息,我以为每次运行时,都会安装预期签名的apk。但是选择了构建类型“debug”。

下面的修复解决了我的问题。

  • 生成签名类型'release'的签名apk。
  • 手动安装了apk。

答案 8 :(得分:2)

如果你使用的是不同版本的apk,那么就会发生这种情况。

答案 9 :(得分:1)

与SO和其他网站上的许多答案和评论相反,您不必使用已从Google Play下载到您的测试设备上的产品的alpha / beta版本进行初步测试(alpha / beta发布流程经常吃半天)。您也不必从开发人员工作室加载并重新加载签名版本apk到您的测试设备。

您可以使用从开发人员工作室直接通过ADB加载到测试设备的调试应用,在应用结算服务中调试初步Google Play。如果您遇到阻止此问题的错误,可能是您在代码中出错了。请特别注意您的SKU(产品ID)及其格式的CASE(例如,如果您将APK加载为com.mydomain.my_product_id,请确保您尝试以这种方式购买 - 提供相同的案例和域名)。另外,要特别注意你的itemType - 这应该是" inapp"或者" subs"适用于应用内购买或订阅中的托管/非托管。

正如Chirag Patel建议的那样,如果您已正确建立了帐单代码,请在初步测试期间使用android.test.purchased Sku(产品ID)执行所有测试。在整个结算操作中检查此ID,以通过签名,令牌和有效负载检查,因为Google测试系统不提供此数据。此外,请为您的某个测试产品提供此ID,以便在您的架构中测试其购买,解锁/加载和演示。要清除购买,只需使用它,传递相同的Sku和以这种方式格式化的标记字符串 - 没有其他字段是相关的:

    "inapp:"+appContext.getAppContext().getPackageName()+":android.test.purchased";

完成此阶段的测试后,请使用您的alpha / beta产品进行半实时测试。创建一个Google群组(实际上是一个邮件列表),将测试用户的电子邮件添加到其中,然后添加/邀请此群组在此阶段测试您的设备(在应用的" APK"部分执行' ;谷歌开发者列表)。购买将被模拟但实际上没有收费 - 但是为了清除和重新测试购买,Google表示您必须从Google钱包中退款。这是测试的唯一阶段,需要耗时的使用alpha / beta负载和测试用户的过程。

答案 10 :(得分:1)

如果你想调试IAB,你需要做的是:

  1. 使用清单上的IAB权限提交谷歌播放应用版本:

  2. 在Google Play上向您的应用添加产品:Administering In-app Billing

  3. 设置已签名的自定义调试密钥库:Configure Eclipse to use signed keystore

答案 11 :(得分:1)

有同样的问题,在我阅读DZDomi的帖子之前没有解决。突然想到您需要启用Google Developer Console中的设置。在"在应用内购买"部分,您的产品有一条线,而最右边则是它的状态。它应该是ACTIVE!

答案 12 :(得分:1)

在我的情况下,由于已安装的apk的不同签名和上传到市场的apk,我看到了相同的消息。

答案 13 :(得分:0)

我的问题是我试图用debug.keystore检查它,我的意思是通过eclipse运行它。我用我在alpha模式下发布的密钥库导出它(它必须在你测试之前发布)。将它安装在我的手机中,我可以正常测试。

答案 14 :(得分:0)

当您在上传apk后添加了应用内购买但未在Play商店(alpha,beta和production)中发布应用程序时,也会出现此问题。

这基本上意味着,您必须在Play商店中发布apk后添加应用程序内购买(alpha,beta和production)。否则,您将无法购买或查询应用程序内购买。

答案 15 :(得分:0)

此处未提及的另一个原因是您需要在真实设备上进行测试。 随着模拟器变得非常好,这是一个容易犯的错误。

答案 16 :(得分:0)

<强>解

在Play商店上传你的应用程序后暂时坚持一段时间,因为谷歌需要一些时间来更新应用程序版本。它会工作!

答案 17 :(得分:0)

我在moto c2 +中遇到同样的问题,一旦我重新启动,它就是设备问题,那么它将非常完美...

答案 18 :(得分:-1)

最近谷歌已对其系统进行了更改,并且由于您已将至少一个APK上传到您的控制台,因此您可以使用任何版本代码/编号来测试您的应用内请求。

交叉引用LINK

  

配置gradle以对调试版本进行签名以进行调试。

android {
    ...
    defaultConfig { ... }
    signingConfigs {
        release {
            storeFile file("my-release-key.jks")
            storePassword "password"
            keyAlias "my-alias"
            keyPassword "password"
        }
    }
    buildTypes {
        debug {
            signingConfig signingConfigs.release
            ...
        }
    }
}