当我尝试使用应用内计费运行我的应用程序时,我收到错误消息:“此版本的应用程序未配置为通过 Google Play 计费。有关更多信息,请查看帮助中心”。
我已经在 Manifest 文件中获得了计费权限,并且我有一个已签名的 .apk 作为草稿上传到 Google Play,并且我还在我的手机上安装了相同的签名 apk。
有关如何解决此问题的任何帮助?
此错误可能是由多种原因引起的。
以下是 Google IAB 测试的要求列表。
先决条件:
AndroidManifest 必须包含“com.android.vending.BILLING”权限。 APK 内置于发布模式。 APK 使用发布证书进行签名。 (重要提示:“App Signing by Google Play”仅在您直接从 GooglePlayStore 下载时才有效!) APK 至少一次上传到 alpha/beta 分发渠道(以前 - 作为草稿)到开发者控制台。 (需要一些时间〜2h-24h)。 IAB 产品已发布且其状态设置为活动。测试帐户已添加到开发者控制台中。
测试要求:
测试 APK 与上传到开发者控制台的版本代码相同。测试 APK 使用与上传到 dev.console 的证书相同的证书进行签名。测试帐户(不是开发人员)- 是设备上的主帐户。 (可能不需要主帐户 - 根据@MinosL 评论)测试帐户作为测试人员选择加入,并且与有效的付款方式相关联。 (@Kyone)
PS:使用发布证书进行调试:https://stackoverflow.com/a/15754187/1321401(链接为 @dipp)
PPS:想列这个名单很久了。
Ahh 在尝试了几个小时后找到了解决方案。
谷歌需要一段时间来处理应用程序并将它们更新到他们的服务器,对我来说大约需要半天时间。因此,在将 apk 保存为 Google Play 上的草稿后,您必须等待几个小时,应用内产品才能正常响应并允许定期购买。导出并签署 APK。尝试进行购买的未签名 APK 会出错。
如果您发布的版本与您在手机上测试的版本不同,也会发生同样的情况。
例如,上传的版本是 android:versionCode="1"
,而您在手机上测试的版本是 android:versionCode="2"
android:versionCode="1"
而手机是 android:versionCode="2"
怎么办?或者我必须更改我的 apk google play 吗?
在旧的开发者控制台中:
Settings
-> Account details
-> License Testing
->具有测试访问权限的 Gmail 帐户并在此处输入您的帐户
在新的开发者控制台中:
Setup
-> License Testing
->输入您的 Gmail 帐户,点击“Enter”,然后点击“保存”。
https://i.stack.imgur.com/sskgA.png
hit 'Enter'
部分。我只是单击保存,电子邮件没有被添加到列表中。
您需要使用您的实时证书签署您的 APK。然后将其安装到您的测试设备上。然后您可以测试 InAppBilling。如果您通过 eclipse 直接运行到设备(在调试模式下)来测试您的应用程序,那么您将收到此错误。
如果您使用 android.test.purchased
作为 SKU,它将一直有效,但您的最终响应中不会包含 developerPayload。
如果您在应用程序项目中使用自己的草稿,您可以一路测试,但您需要付费,因此之后必须自己退款。
您不能使用与 google play 开发控制台相同的 gmail 帐户购买商品。
2021年的结论
对于所有关心调试的人 - 您可以在调试模式下运行、调试和测试代码
以下是您可以如何测试该过程:
(这当然取决于您已经添加并激活了您的产品,并且您的代码已准备好与这些产品集成)
将 com.android.vending.BILLING 添加到清单中 将签名的 apk 上传到内部测试 添加许可证测试人员(Play 控制台 -> 设置 -> 许可证测试) - 如果您在设备上使用多个帐户并且不确定要使用哪个帐户,只需将它们全部添加为测试人员。像往常一样从 Android Studio 运行应用程序(* 应用程序的版本代码应与您刚刚上传到内部测试的版本代码相同)
我做了上述,它工作得很好。
如果您从 2018 年开始在这里,您需要直接从 Play 商店下载 APK 并安装“派生”APK。可能是因为 Google 的 Play Store 有一个功能“App Signing by Google Play”。
如果您使用的 apk 版本与 google play 中的版本不同,则会发生这种情况。
2022 答案:
这是针对调试/发布版本进行测试的,或者如果应用程序由 Play 签名签名(这意味着从 Google Play 交付的应用程序的签名证书与使用 Android Studio 从您的机器安装应用程序时的证书不同)。
检查以下步骤:
在 Google Play Console 上创建您的产品并激活它。添加许可证测试人员(打开 Google Play 控制台 -> 设置 -> 许可证测试)。添加您的 android 设备上列出的所有 Google 帐户。将签名的应用上传到内部测试轨道(必须处于发布模式)。使用测试链接检查应用程序是否可供下载(确保上传到内部轨道的应用程序版本与您在调试模式下测试的版本匹配)。在那里看到最新上传的版本需要一些时间,所以我建议清除 Play Store 应用程序的缓存。从 Android Studio 以调试模式运行您的应用。 (同样,应用程序版本和内部版本号必须与已发布版本上的值匹配到内部轨道)。
我在两个不同的 Google Play 控制台帐户(两个不同的应用程序)上进行了测试,并且可以正常工作。
让我补充一下发生在我身上的事情,可能会对某人有所帮助。
主要是因为签约。
由于我在项目结构中添加了签名详细信息,我在想每次运行时,都会安装预期的签名 apk。但是选择了构建类型“调试”。
下面的修复为我解决了这个问题。
生成构建类型“发布”的签名 apk。
手动安装apk。
与 SO 和其他网站上的许多答案和评论相反,您不必使用已从 Google Play 下载到您的测试设备的产品的 alpha/beta 版本执行初步测试(alpha/beta 发布过程通常会吃光半天)。您也不必从开发人员工作室加载和重新加载签名的发布 apk 到您的测试设备。
您可以使用调试应用程序在应用程序计费服务中调试初步的 Google Play,该调试应用程序通过 ADB 从您的开发人员工作室直接加载到您的测试设备。如果您遇到阻止这种情况的错误,则可能是您在代码中做错了什么。请特别注意您的 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 群组(本质上是一个邮件列表),将您的测试用户电子邮件添加到其中,然后添加/邀请该群组在此阶段测试您的设备(在您应用的 Google 开发者列表的“APK”部分执行)。购买将是模拟的,但不会实际收费 - 但是为了清除和重新测试购买,Google 表示您必须从您的 Google 钱包中退款。这是唯一需要使用 alpha/beta 负载和测试用户的耗时过程的测试阶段。
就我而言,由于已安装的 apk 和上传到市场的 apk 的签名不同,我看到了相同的消息。
有同样的问题,在我阅读 DZDomi 的帖子之前没有解决。突然想到谷歌开发者控制台中有一个设置需要启用。在“应用内购买”部分,您的产品有一行,最右边有一个状态。它应该是活跃的!
如果您想调试 IAB,您需要做的是:
向 google play 提交具有清单上的 IAB 权限的应用程序版本:在 google play 上将产品添加到您的应用程序:管理应用内计费设置自定义调试密钥库签名:配置 Eclipse 以使用签名密钥库
最近 google 对其系统进行了更改,由于您已将至少一个 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
...
}
}
}
我的问题是我试图用 debug.keystore 检查它,我的意思是通过 eclipse 运行它。我用我以 alpha 模式发布的密钥库导出它(它必须在你测试它之前发布)。安装它我的手机,比我可以正常测试它。
如果您在上传 apk 后添加了应用内购买,但尚未在 play 商店(alpha、beta 和生产)中发布应用程序,也会出现此问题。
这基本上意味着,您必须在 Play 商店(alpha、beta 和生产)中发布 apk 之后添加应用内购买。否则您将无法购买或查询应用内购买。
这里没有提到的另一个原因是您需要在真实设备上进行测试。随着模拟器变得非常好,这是一个容易犯的错误。
解决方案
将您的应用上传到 Play 商店后稍等片刻,因为谷歌需要一些时间来更新应用版本。它会起作用的!
如果您想与另一个未发布但具有相同 id、版本代码和已部署版本名称的应用程序集成,请不要忘记在 Flutter 应用程序中编辑 appname.iml 文件版本,因为我坚持使用同样的错误。
如果所有设置都正常,但您仍然收到错误 This version of the application is not configured for billing through Google Play. Check the help center for more information.
在 Play 商店中编辑您的应用内产品定价或停用和激活应用内产品。这将解决问题。