当我尝试使用应用内结算运行我的应用时,我收到错误消息:“此版本的应用程序未配置为通过Google Play结算 . 请查看帮助中心以获取更多信息” .
我已经在清单文件中获得了结算权限,并且我已经将已签名的.apk作为草稿上传到Google Play上,并且我还在我的手机上安装了相同的已签名的apk .
有关如何解决此问题的任何帮助?
此错误可能由多种原因引起 .
以下是Google IAB测试的要求列表 .
先决条件:
AndroidManifest必须包含 "com.android.vending.BILLING" permission .
APK内置于 release mode .
APK是 signed 与 release 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 certificate :https://stackoverflow.com/a/15754187/1321401(链接的Thnx @dipp)
P.P.S:已经有很长一段时间了 .
Thnx @zlgdev,@Kyone更新
啊,在尝试了几个小时之后找到了解决方案 .
谷歌需要一段时间来处理应用程序并将其更新到他们的服务器,对我而言需要大约半天时间 . 因此,在将Google保存为Google Play上的草稿后,您必须等待几个小时才能使应用内商品正常响应并允许定期购买 .
导出并签名APK . 未签名的APK尝试购买将收到错误 .
如果您发布的版本与您在手机上测试的版本不同,也会发生同样的情况 .
例如,上传的版本是 android:versionCode="1" ,您在手机上测试的版本是 android:versionCode="2"
android:versionCode="1"
android:versionCode="2"
您需要使用实时证书对APK进行签名 . 然后将其安装到您的测试设备上 . 然后,您可以测试InAppBilling . 如果您通过eclipse直接运行到设备来测试应用程序(在调试模式下),那么您将收到此错误 .
如果您使用 android.test.purchased 作为SKU,它将一直有效,但您不会在最终响应中使用developerPayload .
android.test.purchased
如果您在应用程序项目中使用自己的草稿,您可以一直测试但是您将被收费,因此必须在之后自行退款 .
您无法使用与Google Play开发控制台相同的Gmail帐户购买商品 .
如果您从2018年起来,则需要直接从Play商店下载APK并安装“衍生”APK . 也许是因为谷歌的Play商店有一项功能“通过Google Play登录” .
在开发者控制台中:
Settings - > Account details - > License Testing - >具有测试访问权限的Gmail帐户
Settings
Account details
License Testing
并在此输入您的帐户
让我加上发生在我身上的事情,可能会帮助一些人 .
这主要是由于签署 .
由于我在项目结构中添加了签名详细信息,因此我认为每次运行时,预期已签名的apk都会安装 . 但是选择了构建类型“debug” .
以下修复解决了我的问题 .
生成了构建类型'release'的签名apk .
手动安装了apk .
如果您使用的apk版本与Google Play中的版本不同,则会发生这种情况 .
在我的情况下,由于已安装的apk的不同签名和上传到市场的apk,我看到了相同的消息 .
如果你想调试IAB,你需要做的是:
使用清单上的IAB权限提交谷歌播放应用版本:
在Google Play上向您的应用添加产品:Administering In-app Billing
设置签名的自定义调试密钥库:Configure Eclipse to use signed keystore
与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负载和测试用户的过程 .
有同样的问题,在我阅读DZDomi的帖子之前没有解决 . 突然想到您需要启用Google Developer Console中的设置 . 在“应用内购买”部分中,您的产品有一条线,而最右边则有一个状态 . 它应该是ACTIVE!
我的问题是我试图用debug.keystore检查它,我的意思是通过eclipse运行它 . 我用我在alpha模式下发布的密钥库导出它(它必须在你可以测试之前发布) . 安装它我的手机,而不是我可以正常测试 .
当您在上传apk后添加了应用内购买但未在Play商店(alpha,beta和production)中发布应用程序时,也会出现此问题 .
这基本上意味着,你必须在播放商店(alpha,beta和制作)中发布apk后添加应用内购买 . 否则,您将无法购买或查询应用程序内购买 .
这里没有提到的另一个原因是你需要在真实设备上进行测试 . 随着模拟器变得非常好,这是一个容易犯的错误 .
SOLUTION
在Play商店上传你的应用程序后暂时坚持一段时间,因为谷歌需要一些时间来更新应用程序版本 . 它会工作!
我在moto c2中有同样的问题在我的情况下它是设备问题一旦我 restart 然后它将符文完美...
最近谷歌已对其系统进行了更改,并且由于您已将至少一个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 ... } } }
18 回答
此错误可能由多种原因引起 .
以下是Google IAB测试的要求列表 .
先决条件:
AndroidManifest必须包含 "com.android.vending.BILLING" permission .
APK内置于 release mode .
APK是 signed 与 release 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 certificate :https://stackoverflow.com/a/15754187/1321401(链接的Thnx @dipp)
P.P.S:已经有很长一段时间了 .
Thnx @zlgdev,@Kyone更新
啊,在尝试了几个小时之后找到了解决方案 .
谷歌需要一段时间来处理应用程序并将其更新到他们的服务器,对我而言需要大约半天时间 . 因此,在将Google保存为Google Play上的草稿后,您必须等待几个小时才能使应用内商品正常响应并允许定期购买 .
导出并签名APK . 未签名的APK尝试购买将收到错误 .
如果您发布的版本与您在手机上测试的版本不同,也会发生同样的情况 .
例如,上传的版本是
android:versionCode="1"
,您在手机上测试的版本是android:versionCode="2"
您需要使用实时证书对APK进行签名 . 然后将其安装到您的测试设备上 . 然后,您可以测试InAppBilling . 如果您通过eclipse直接运行到设备来测试应用程序(在调试模式下),那么您将收到此错误 .
如果您使用
android.test.purchased
作为SKU,它将一直有效,但您不会在最终响应中使用developerPayload .如果您在应用程序项目中使用自己的草稿,您可以一直测试但是您将被收费,因此必须在之后自行退款 .
您无法使用与Google Play开发控制台相同的Gmail帐户购买商品 .
如果您从2018年起来,则需要直接从Play商店下载APK并安装“衍生”APK . 也许是因为谷歌的Play商店有一项功能“通过Google Play登录” .
在开发者控制台中:
Settings
- >Account details
- >License Testing
- >具有测试访问权限的Gmail帐户并在此输入您的帐户
让我加上发生在我身上的事情,可能会帮助一些人 .
这主要是由于签署 .
由于我在项目结构中添加了签名详细信息,因此我认为每次运行时,预期已签名的apk都会安装 . 但是选择了构建类型“debug” .
以下修复解决了我的问题 .
生成了构建类型'release'的签名apk .
手动安装了apk .
如果您使用的apk版本与Google Play中的版本不同,则会发生这种情况 .
在我的情况下,由于已安装的apk的不同签名和上传到市场的apk,我看到了相同的消息 .
如果你想调试IAB,你需要做的是:
使用清单上的IAB权限提交谷歌播放应用版本:
在Google Play上向您的应用添加产品:Administering In-app Billing
设置签名的自定义调试密钥库:Configure Eclipse to use signed keystore
与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和以这种方式格式化的标记字符串 - 没有其他字段是相关的:
完成此阶段的测试后,使用您的alpha / beta产品进行半实时测试 . 创建一个Google群组(实际上是一个邮件列表),将测试用户的电子邮件添加到其中,然后添加/邀请此群组在此阶段测试您的设备(在您应用的Google开发人员列表的“APK”部分执行) . 购买将被模拟,但实际上没有收费 - 但要清除并重新测试购买,Google表示您必须从Google钱包中退款 . 这是测试的唯一阶段,需要耗时的使用alpha / beta负载和测试用户的过程 .
有同样的问题,在我阅读DZDomi的帖子之前没有解决 . 突然想到您需要启用Google Developer Console中的设置 . 在“应用内购买”部分中,您的产品有一条线,而最右边则有一个状态 . 它应该是ACTIVE!
我的问题是我试图用debug.keystore检查它,我的意思是通过eclipse运行它 . 我用我在alpha模式下发布的密钥库导出它(它必须在你可以测试之前发布) . 安装它我的手机,而不是我可以正常测试 .
当您在上传apk后添加了应用内购买但未在Play商店(alpha,beta和production)中发布应用程序时,也会出现此问题 .
这基本上意味着,你必须在播放商店(alpha,beta和制作)中发布apk后添加应用内购买 . 否则,您将无法购买或查询应用程序内购买 .
这里没有提到的另一个原因是你需要在真实设备上进行测试 . 随着模拟器变得非常好,这是一个容易犯的错误 .
SOLUTION
在Play商店上传你的应用程序后暂时坚持一段时间,因为谷歌需要一些时间来更新应用程序版本 . 它会工作!
我在moto c2中有同样的问题在我的情况下它是设备问题一旦我 restart 然后它将符文完美...
最近谷歌已对其系统进行了更改,并且由于您已将至少一个APK上传到控制台,因此您可以使用任何版本代码/号码在您的应用中测试您的应用内请求 .
交叉引用LINK