【问题标题】:Unable to make Android in-app purchase with test account "The publisher cannot purchase this item"无法使用测试帐户进行 Android 应用内购买“发布者无法购买此项目”
【发布时间】:2014-04-21 03:29:37
【问题描述】:

我正在尝试在 Android 中测试应用内购买。

我已将一个私人签名的 apk 上传到 Google Player Developer Console。它目前是“Alpha 测试”部分中的草稿

当我尝试购买商品时,我收到以下错误:

The publisher cannot purchase this item.

这让我很困惑,因为我使用的是测试帐户,而不是用于发布此应用的帐户。

我怀疑它可能会失败,因为我在手机上有开发者帐户,但这是我的个人手机,所以我不想从手机上删除该帐户(特别是如果我不确定它会解决问题)。

谁能确认发布者帐户是否必须从手机中完全删除才能测试应用内购买?

谢谢!

【问题讨论】:

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


    【解决方案1】:

    首先你应该在脑海中记下这一点

    测试帐号:

    Google Play 不允许您使用您的开发者帐户 直接购买您自己创建的应用内产品, 您需要在您的开发者帐户下创建测试帐户 个人资料。

    更多信息:

    1) http://developer.android.com/training/in-app-billing/test-iab-app.html#PlayItemTest

    2) http://developer.android.com/google/play/billing/billing_testing.html#billing-testing-test

    多个帐户:

    注意:要进行测试购买,许可证测试帐户必须在 用户的安卓设备。如果设备有多个帐户,则 将使用下载该应用程序的帐户进行购买。如果 没有任何帐户下载该应用程序,购买是使用 第一个帐户。用户可以确认正在制作的帐户 通过展开购买对话框进行购买。

    查看此链接:

    http://developer.android.com/google/play/billing/billing_testing.html#testing-purchases

    希望它能解决您的问题。如果您想了解更多信息,请告诉我。

    【讨论】:

    • 谢谢毛利克。我无法验证谁在进行购买,因为购买对话框从未出现(它会立即进入失败屏幕),但我相信这可能是问题所在。听起来更改主帐户的唯一方法是恢复出厂设置 :( “注意:更改设备上的主帐户的唯一方法是恢复出厂设置,确保先使用主帐户登录。”developer.android.com/google/play/billing/billing_testing.html
    • 嗯!!您是否找到任何方法通过使用另一个帐户(而不是通过开发人员帐户)而不是恢复出厂设置来重新安装 Play 商店?我没试过,但你可以尝试一次,只需通过测试帐户重新安装。您可以在 google 上找到 com.vending (play store) apk 最新版本,例如 4.3 或其他版本。
    • @Goose,状态如何?您现在是否在手机中完全测试了应用计费?如果您需要,请告诉我,如果您需要更多帮助。
    • 我无法在自己的手机上测试应用内购买,但我可以在朋友的手机上进行测试。在他的手机上一切正常。我认为这证实了您原始答案中的所有内容。我没有尝试重新安装 Play 商店。
    • 测试 IAP 是一个严重的 PITA !!
    【解决方案2】:

    从运行库存 KitKat 的手机上的 Google Play v4.9.13 开始,您可以在 Play 商店内切换 Google 帐户。在应用程序菜单的右上角有一个下拉菜单,您可以在其中选择用于 Google Play 的活动帐户。请注意,必须先将帐户添加到设备(在设备设置 > 帐户中)。

    我仍然需要测试我的应用的 IAP 实现,但对于那些不维护单独的“开发人员设备”的人来说,这似乎比恢复出厂设置更好。

    【讨论】:

    • 我找到了这个选项,但是在更改为不同的 Google 帐户(我在开发者控制台中将其列为测试帐户)后,我仍然收到“发布者无法购买”错误。我不知道如何让应用从我的测试帐户而不是我的开发者帐户发送购买请求。
    • 我发现如果您启动“Alpha/Beta”,您将能够使用另一个帐户下载您的应用并测试 IAP。
    • 按照 Maulik 关于设备上第一个帐户的回答中的信息,我找到了两种方法来完成这项工作:1)设置一个新设备并首先在该设备上设置我的测试帐户,然后侧载应用程序,或 2) 将应用程序作为测试版上传到开发者控制台,等待几个小时,然后从其 Play 商店 URL 将应用程序下载到设备上(您无法通过搜索商店找到 Alpha 版应用程序) .
    • 接下来的问题是测试账户需要输入真实的支付信息。付款屏幕显示 Google 将使用该信息创建一个新的 Google 电子钱包帐户。我真的不希望我的信用卡信息存在于我没有其他用途的额外帐户中,但我能够输入 PayPal 帐户的登录信息,并且在 3-4 次连接失败后,支付屏幕被接受这样我就可以继续进行测试了。
    • Alpha 应用程序应该可以通过特殊 URL (play.google.com/apps/testing/com.package.name) 访问您为测试帐户设置的 Google 群组的成员。见support.google.com/googleplay/android-developer/answer/…
    【解决方案3】:

    此方法仅在您至少有一个版本的应用发布到 Google Play 时才有效

    我执行以下操作来测试应用内购买:

    我使用第二部手机和单独的 Google 帐户。对于付款,我使用 google play 代金券。我为应用商店创建了一个签名的发布 apk,并使用 adb install 将其加载到设备上。这样我就可以从设备上进行真正的购买,并在控制台中观察调试输出。这种方法的优点是我可以在几秒钟内构建和替换 apk,而无需将其上传到应用商店并等待它发布。我强烈建议通过控制台输出记录一张真钱购买收据,并将其存储在文本文件中以备后用。有了这个,您可以轻松地实现服务器端收据验证,一遍又一遍地发送您存储的收据,直到一切正常。为测试购买真钱并没有那么糟糕,您花费的 70% 的钱都会返还给您。

    【讨论】:

      【解决方案4】:

      FWIW 我可以使用 Android Studio 和 ADB 桥在一台设备上使用应用内购买来测试调试版本,并在第二台 xxxxxxxxx.gmail.com 上解决发布商被阻止购买他自己的商品的问题。

      1) 执行从 Play 商店安装应用程序所需的所有操作(我在 Android Studio 中使用了 TrivialDrive 示例)并收到错误消息“发布者无法购买此项目”。

      2) 在我的桌面上,我退出了我的发布者 gmail 地址,然后创建了一个新的 gmail 帐户进行测试。

      3) 在 Android 设备(我的是 Lollipop)上,转到 settings:accounts:google 并添加您刚刚创建的 gmail 帐户作为第二个帐户。它将提示您添加付款方式。你必须这样做。信用卡,paypal,什么的。您需要一个有效的第二个 Play 商店帐户才能购买东西。

      4) 在开发者控制台中,确保在两个地方添加新的 gmail 地址作为测试人员;特定应用的 APK 部分以及您的帐户设置中的许可证测试。

      5) 在应用程序的 APK 部分的开发者控制台中,复制测试人员选择加入的 URL 并将其邮寄到您的新 gmail 地址,以便您可以从 Android 设备上的电子邮件中打开它。

      6) 前往 Android 上的商店应用。单击左上角的三重栏。顶部附近的滑出菜单有购买东西的帐户。将其更改为您添加的新 gmail 帐户。

      7) 在 Android 上登录以阅读新的 gmail 并找到您邮寄给自己的选择加入 URL 等待您。单击它并按照它安装应用程序。选择 Play Store,而不是浏览器,从它到达那里时开始安装。

      8) 现在尝试应用内购买。没有更多的出版商不能购买错误。在 alpha 测试中,它说您实际上不会被计费。您可能需要等待一段时间才能在开发人员控制台中完成的更改通过系统传播。因此,如果第一次尝试应用内购买不起作用,请等待半小时再试一次。

      之后,您可以在 Android Studio 中重新构建已签名的发布版本并通过 adb bridge 安装它。应用内购买继续有效。您还可以构建一个调试版本,它也适用于 IAP 测试。您必须在 build.gradle 中添加您的密钥库信息才能使调试版本正常工作。

          android {
      signingConfigs {
          release {
              storeFile file("MyAndroidKey.keystore")
              storePassword "mypassword"
              keyAlias "MyAndroidKey"
              keyPassword "mypassword"
          }
          debug {
              storeFile file("MyAndroidKey.keystore")
              storePassword "mypassword"
              keyAlias "MyAndroidKey"
              keyPassword "mypassword"
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2012-12-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-12-09
        • 2012-05-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多