ChatGPT解决这个技术问题 Extra ChatGPT

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

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

我已经在 Manifest 文件中获得了计费权限,并且我有一个已签名的 .apk 作为草稿上传到 Google Play,并且我还在我的手机上安装了相同的签名 apk。

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

我在真实设备上遇到了这个问题,但在模拟器上没有。我在模拟器和设备上安装了相同的版本。我在模拟器和设备上以同一用户身份登录。在设备上我得到了这个版本的应用程序未配置的计费错误,在模拟器上一切正常,并出现与测试卡的对话框。有什么区别?

l
longi

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

以下是 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:想列这个名单很久了。

感谢 @zlgdev@Kyone@MinosL 的更新


不要忘记使用上传构建后生成的“选择加入 URL”确保您用于测试 IAB 的帐户选择加入测试人员;并且它与有效的付款方式相关联。
只测试 IAP 不是更容易吗?或者一般地测试事物..
也值得注意;测试帐号不应与开发者帐号相关联(不应有权上传 APK)
也值得注意;如果启用了“应用签名证书”,则我们无法使用本地 APK 进行真实购买测试,因为我们无法使用签名证书进行签名。 (我花了 3 个小时才知道)
我已经成功地测试了 1) 一个签名的调试应用程序,它是 2) 不是设备上的主帐户,所以谷歌 IAB 测试的过程似乎没有上面提到的那么严格。
C
Community

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

谷歌需要一段时间来处理应用程序并将它们更新到他们的服务器,对我来说大约需要半天时间。因此,在将 apk 保存为 Google Play 上的草稿后,您必须等待几个小时,应用内产品才能正常响应并允许定期购买。导出并签署 APK。尝试进行购买的未签名 APK 会出错。


哇,这严重吗?刚刚遇到了同样的问题。为了测试应用内计费,Google 要求我做的所有事情都做了,但仍然收到相同的回避错误消息。我想我将不得不拭目以待。但是,Google 真的希望我们的开发人员在每次需要更新应用程序以实现应用内计费时等待数小时吗?至少可以说,这对我来说似乎很不合适。
您可以在连接到 Android Studio 时进行测试/在连接到调试器时运行吗?还是您需要通过 USB 安装发行版 apk?
除了 Android 工具 > 导出签名项目...等,然后手动将 APK 复制到设备,测试,...重复之外,是否有更简单的方法来测试购买过程?我肯定错过了什么?
说真的,我不能使用带有调试证书的应用程序并测试应用内计费?
请注意,您可以在工作时直接从 IDE 使用调试版本。您只需要将调试密钥库更改为与您的发布商店匹配的密钥库。有关如何操作的更多信息,请参阅此帖子:stackoverflow.com/questions/10886814/…
s
sandalone

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

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


你能告诉我如果上传的版本是 android:versionCode="1" 而手机是 android:versionCode="2" 怎么办?或者我必须更改我的 apk google play 吗?
您需要做的是将本地版本降低到“1”,使其与当前的实时版本相匹配,至少暂时用于测试。
根据您的情况,似乎有 2 个常见的修复此错误的方法。就我而言,就是这个。
谢谢,这就是问题所在。在我连接的设备上使用发布签名的 apk 进行调试很好。然后,更改了版本代码,它开始收到 1005 错误。哇!
@Anna 请注意,如果您使用 iabHelper,-1005 也是 USER_CANCELLED
P
Pavel Chuchuva

在旧的开发者控制台中:

Settings -> Account details -> License Testing ->具有测试访问权限的 Gmail 帐户并在此处输入您的帐户

在新的开发者控制台中:

Setup -> License Testing ->输入您的 Gmail 帐户,点击“Enter”,然后点击“保存”。

https://i.stack.imgur.com/sskgA.png


奇迹般有效。
嗨,我的电子邮件已添加到许可证帐户中。我仍然收到错误消息
特别注意 hit 'Enter' 部分。我只是单击保存,电子邮件没有被添加到列表中。
我永远无法用这个答案来报答你拯救我的生命、我的婚姻和我的理智。祝福你。
这也适用于我,但我有一个担心。我如何确保在发布应用程序时这将起作用?
E
Evan Leis

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

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

如果您在应用程序项目中使用自己的草稿,您可以一路测试,但您需要付费,因此之后必须自己退款。

您不能使用与 google play 开发控制台相同的 gmail 帐户购买商品。


+1 从调试器运行使用调试证书。导出应用程序并创建新的公钥(并将其安装在开发者控制台中)后,只需通过电子邮件将 apk 发送给自己并从您的 gmail 收件箱中安装它。
如果我想尝试“android.test.purchased”,我会在我的代码和开发者控制台中更改 SKU 吗?
d
dor506

2021年的结论

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

以下是您可以如何测试该过程:

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

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

我做了上述,它工作得很好。


我永远无法用这个答案来报答你拯救我的生命、我的婚姻和我的理智。祝福你。
也为我工作。我能够使用模拟器在我的颤振应用程序中测试应用程序购买。 (我在颤振中使用 in_app_purchase 库)
不要忘记将 com.android.vending.BILLING 添加到您的 debug/AndroidManifest.xml 文件中。
我跳过了第 1 步,它正在用于测试目的。我代表这篇文章 developer.android.com/google/play/billing/…
漂亮,为我工作!非常好的解决方案。
L
Lawrence Gimenez

如果您从 2018 年开始在这里,您需要直接从 Play 商店下载 APK 并安装“派生”APK。可能是因为 Google 的 Play Store 有一个功能“App Signing by Google Play”。


哪个APK?我正在使用 AIDL,我还需要这样做吗?
@ZhenLiu 我想不需要
此外,该应用程序不能已通过其他方式(即 Android Studio)安装在设备上。从 Play 商店安装/更新将起作用,但 IAP 将不起作用 - 您将收到 OPs 错误。
我们如何调试这个?
A
Amalka

如果您使用的 apk 版本与 google play 中的版本不同,则会发生这种情况。


M
Mahmoud

2022 答案:

这是针对调试/发布版本进行测试的,或者如果应用程序由 Play 签名签名(这意味着从 Google Play 交付的应用程序的签名证书与使用 Android Studio 从您的机器安装应用程序时的证书不同)。

检查以下步骤:

在 Google Play Console 上创建您的产品并激活它。添加许可证测试人员(打开 Google Play 控制台 -> 设置 -> 许可证测试)。添加您的 android 设备上列出的所有 Google 帐户。将签名的应用上传到内部测试轨道(必须处于发布模式)。使用测试链接检查应用程序是否可供下载(确保上传到内部轨道的应用程序版本与您在调试模式下测试的版本匹配)。在那里看到最新上传的版本需要一些时间,所以我建议清除 Play Store 应用程序的缓存。从 Android Studio 以调试模式运行您的应用。 (同样,应用程序版本和内部版本号必须与已发布版本上的值匹配到内部轨道)。

我在两个不同的 Google Play 控制台帐户(两个不同的应用程序)上进行了测试,并且可以正常工作。


如果您在添加许可证测试后仍然收到错误,这是正确的答案。谢谢!
S
Shree Harsha S

让我补充一下发生在我身上的事情,可能会对某人有所帮助。

主要是因为签约。

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

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

生成构建类型“发布”的签名 apk。

手动安装apk。


S
StephenDonaldHuffPhD

与 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 负载和测试用户的耗时过程的测试阶段。


g
goRGon

就我而言,由于已安装的 apk 和上传到市场的 apk 的签名不同,我看到了相同的消息。


S
Søren

有同样的问题,在我阅读 DZDomi 的帖子之前没有解决。突然想到谷歌开发者控制台中有一个设置需要启用。在“应用内购买”部分,您的产品有一行,最右边有一个状态。它应该是活跃的!


C
Community

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

向 google play 提交具有清单上的 IAB 权限的应用程序版本:在 google play 上将产品添加到您的应用程序:管理应用内计费设置自定义调试密钥库签名:配置 Eclipse 以使用签名密钥库


A
Anoop M Maddasseri

最近 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
            ...
        }
    }
}

G
Gal Rom

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


D
DZDomi

如果您在上传 apk 后添加了应用内购买,但尚未在 play 商店(alpha、beta 和生产)中发布应用程序,也会出现此问题。

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


J
JDenais

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


A
Ali Akram

解决方案

将您的应用上传到 Play 商店后稍等片刻,因为谷歌需要一些时间来更新应用版本。它会起作用的!


C
Chetan Sable

如果您想与另一个未发布但具有相同 id、版本代码和已部署版本名称的应用程序集成,请不要忘记在 Flutter 应用程序中编辑 appname.iml 文件版本,因为我坚持使用同样的错误。


M
Mathews P

如果所有设置都正常,但您仍然收到错误 This version of the application is not configured for billing through Google Play. Check the help center for more information.

在 Play 商店中编辑您的应用内产品定价或停用和激活应用内产品。这将解决问题。


您的答案可以通过额外的支持信息得到改进。请edit添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。您可以找到有关如何写出好答案的更多信息in the help center