4

我和其他许多人一样,只是在验证静态响应是否正常工作后尝试测试我的应用内购买。但是当我阅读文档、帖子和答案时,似乎没有任何结果。我变得非常沮丧。

我的最终目标是找出我是否可以在不收费的情况下进行测试。

这个文档说我可以 -链接

获得测试访问权限后,这些用户可以旁加载您的应用程序并测试您产品的完整销售、购买和履行流程。测试购买是真实订单,Google Play 以与其他订单相同的方式处理它们。购买完成后,Google Play 会阻止订单进入财务处理流程确保不会向用户帐户收取任何实际费用,并在 14 天后自动取消已完成的订单。

和相同的链接

在测试购买期间,用户可以在您的应用中测试实际的销售、购买和履行流程。在购买过程中,应用内商品显示为普通商品,并附有实际价格。但是,Google Play 会在购买对话框的中心使用通知标记测试购买,以便于识别

但是在这个页面上,它说 -链接

使用测试人员帐户登录到测试设备。通过购买一些项目来测试您的应用内结算应用程序,并解决您遇到的任何问题。如果您不希望实际向测试人员收费,请记住退还购买的费用!

WTF……有人知道吗?可以不收费做测试吗?如果是这样,怎么办?

4

3 回答 3

2

是:您可以为您在控制台中实际定义的真实商品 (SKU) 进行测试购买,无需支付任何费用。我自己刚刚成功地做到了这一点。

与目前接受的答案中给出的建议相反,不需要android.test.purchased像使用静态测试那样使用虚拟 SKU 。

OP引用了这一段:

在测试购买期间,用户可以在您的应用中测试实际的销售、购买和履行流程。在购买过程中,应用内商品显示为普通商品,并附有实际价格。但是,Google Play 会在购买对话框的中心使用通知标记测试购买,以便于识别

到目前为止,这是正确的,并且与我能够实现的目标一致。

但是OP引用的后续段落:

使用测试人员帐户登录到测试设备。通过购买一些项目来测试您的应用内结算应用程序,并解决您遇到的任何问题。如果您不希望实际向测试人员收费,请记住退还购买的费用!

就我而言,这(尤其是最后一句话)是不正确的。

你可以做的是按照第一段。也就是说,只要将测试帐户作为测试人员添加到控制台,那么在尝试进行购买时,对话框(显示价格等)也应该在其中心有一个特殊字符串(如第一段所述)说明“这是一个测试订单,您不会被收费”。

然而,要真正做到这一点,测试人员(或测试设备)使用的实际 APK 也必须是上传到 alpha 通道的。

因此,我采取的步骤如下:

  1. 为 alpha 通道测试创建一个单独的 Google 组。

  2. 将您的 IAP 测试用户 gmail 帐户添加到该组。

  3. 将带有应用内购买代码的 APK(导出并使用发行证书签名)上传到 Alpha 通道。

  4. 等待一两个小时让 alpha 版本生效。

  5. 同时,设置一个单独的测试设备,上面只设置了测试 gmail 帐户。

  6. 以测试用户身份登录时,通过导航到测试设备上的选择加入 URL 选择加入 Alpha 通道测试。

  7. 使用该测试人员帐户登录 Play 并从 Play 安装应用程序。此时(或一两个小时后)您上传的最新 alpha 应该是现在安装的那个。

  8. 尝试进行购买。当对话框出现价格时,它应该有一个额外的“这是一个测试订单,你不会被收费”字符串。

事实上,为了完全准确,测试设备似乎不一定需要从 Play 安装 alpha APK。根据我的测试,重要的您确实有一个 APK 作为 alpha 上传,并且您在测试设备上运行的 APK 具有相同的版本号。此外,测试用户需要选择加入 alpha 版本并在控制台中添加为测试人员(如上所述)。我刚刚导出了我的 APK 的另一个调整版本并使用 加载到我的测试设备中adb install,我仍然可以尝试购买带有“...you will not becharging”消息的真实 SKU。

于 2015-01-24T20:19:17.070 回答
2

如果您使用的是 In App Billing 版本 3,那么您可以简单地使用product id="android.test.purchased"。它是虚拟产品,您不应将其添加到开发人员控制台中。您可以免费购买该产品。

android.test.purchased

当您使用此产品 ID 提出应用内结算请求时,Google Play 会做出响应,就像您成功购买了商品一样。响应包含一个 JSON 字符串,其中包含虚假购买信息(例如,虚假订单 ID)。在某些情况下,JSON 字符串已签名并且响应包含签名,因此您可以使用这些响应测试您的签名验证实现。

希望它会帮助你。

于 2013-06-21T07:47:32.310 回答
0

你必须消费一次购买。

consume.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Thread t = new Thread(new Runnable() {
                @Override
                public void run() {
                    String purchaseToken = "inapp:" + getPackageName() + ":android.test.purchased";
                    try {
                        Log.d("","Running");
                        int response = mService.consumePurchase(3, getPackageName(), purchaseToken);
                        if(response==0)
                        {
                            Log.d("Consumed","Consumed");
                        }else {
                            Log.d("","No"+response);
                        }
                    }catch (RemoteException e)
                    {
                        Log.d("Errorr",""+e);
                    }

                }
            });
            t.start();
        }
    });
于 2014-09-13T15:05:48.423 回答