首页 文章

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

提问于
浏览
227

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

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

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

18 回答

  • 183

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

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

    先决条件:

    • AndroidManifest必须包含 "com.android.vending.BILLING" permission .

    • APK内置于 release mode .

    • APK是 signedrelease certificate(s) .

    • APK上传到 alpha/beta distribution Channels (之前 - 作为草稿)至少一次到开发者控制台 . (需要一些时间 ~2h-24h ) .

    • IAB products are published 并将其状态设置为 active .

    • Test account(s) is added 在开发者控制台中 .

    测试要求:

    • 测试APK将 same versionCode 作为上传到开发者控制台的那个 .

    • 测试APK是 signed ,其中 same certificate(s) 是上传到dev.console的 .

    • Test account (非开发人员) - 是设备上的 main account .

    • Test account is opted-in 作为测试人员,它是 linked to a valid payment method . (@Kyone

    P.S: Debugging with release certificatehttps://stackoverflow.com/a/15754187/1321401(链接的Thnx @dipp

    P.P.S:已经有很长一段时间了 .

    Thnx @zlgdev@Kyone更新

  • 1

    啊,在尝试了几个小时之后找到了解决方案 .

    • 谷歌需要一段时间来处理应用程序并将其更新到他们的服务器,对我而言需要大约半天时间 . 因此,在将Google保存为Google Play上的草稿后,您必须等待几个小时才能使应用内商品正常响应并允许定期购买 .

    • 导出并签名APK . 未签名的APK尝试购买将收到错误 .

  • 9

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

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

  • 275

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

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

    如果您在应用程序项目中使用自己的草稿,您可以一直测试但是您将被收费,因此必须在之后自行退款 .

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

  • 1

    如果您从2018年起来,则需要直接从Play商店下载APK并安装“衍生”APK . 也许是因为谷歌的Play商店有一项功能“通过Google Play登录” .

  • 1

    在开发者控制台中:

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

    并在此输入您的帐户

  • 0

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

    这主要是由于签署 .

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

    以下修复解决了我的问题 .

    • 生成了构建类型'release'的签名apk .

    • 手动安装了apk .

  • 4

    如果您使用的apk版本与Google Play中的版本不同,则会发生这种情况 .

  • 0

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

  • 3

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

  • 0

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

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

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

  • 129

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

  • -1

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

  • 0

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

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

  • 0

    这里没有提到的另一个原因是你需要在真实设备上进行测试 . 随着模拟器变得非常好,这是一个容易犯的错误 .

  • 2

    SOLUTION

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

  • 1

    我在moto c2中有同样的问题在我的情况下它是设备问题一旦我 restart 然后它将符文完美...

  • 45

    最近谷歌已对其系统进行了更改,并且由于您已将至少一个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
                ...
            }
        }
    }
    

相关问题