应用内结算测试:android.test.purchased已经拥有

psy*_*khi 110 android in-app-billing

我目前正在为未来的应用程序测试In-App Billing,并且在我第一次成功"购买"测试项目"android.test.purchased"后,我现在每次尝试再次购买时都会收到响应代码7,这意味着我已经拥有了这个项目.

12-15 23:02:14.149:E/IabHelper(19829):应用内结算错误:无法购买商品,错误回复:7:商品已经拥有

根据我的理解,这次购买应该永远是可能的,对吧?那么开发人员可以测试他/她的应用程序?

如果没有,我如何"重置"其状态为不拥有?我正在使用Google In-App Billing Sample中的util包.

Aas*_*rma 108

将此代码添加到线程以启动使用请求.

int response = mService.consumePurchase(3, getPackageName(), purchaseToken);
Run Code Online (Sandbox Code Playgroud)

这里为购买测试,buyToken是

purchaseToken = "inapp:" + getPackageName() + ":android.test.purchased";
Run Code Online (Sandbox Code Playgroud)

if (response == 0)
Run Code Online (Sandbox Code Playgroud)

然后消费成功.

  • 什么是mService?mHelper?但我找不到consumePurchase() (11认同)
  • 传说这个作品,@ psykhi应该真的给你积分.我试图消费它,但无法解决购买令牌.谢谢 (2认同)
  • 在API文档中找不到任何提及,很好找 (2认同)

mtt*_*lns 83

无需编写任何特殊的消费代码.只需使用adb命令清除Google Play商店数据:

adb shell pm clear com.android.vending
Run Code Online (Sandbox Code Playgroud)

  • 这对于测试设备来说是一个很好的解决方案,但要小心:它会重置Google Play商店应用中的所有设置.所以,我宁愿不在我的个人设备上这样做. (8认同)
  • 没有!这是个坏主意,你丢失了应用程序中购买的其他产品和其他应用程序,如果你想测试你的应用内购买,你必须消费产品,方案只是创建两个用于购买的东西,另一个用于购买消费项目. (6认同)
  • @RahulMandaliya通过使用getPurchases()API来了解已经购买的内容,您的应用应该能够抵御缓存清除. (2认同)

psy*_*khi 62

事实证明,android.test.purchased项的行为类似于常规ID.这意味着如果您希望能够再次购买它,则必须在代码中的某处使用它.我认为Google文档在此问题上存在误导性,并且他们应该添加另一个静态ID,您可以无休止地购买这些ID用于测试目的.

  • 请查看@mttmlins的以下答案,或阅读http://www.vvse.com/blog/blog/2016/08/26/android-in-app-billing-clear-purchase-state-of-sku-android. test.purchased / (3认同)

emb*_*mbo 28

应用内版本3:

IabHelper.QueryInventoryFinishedListener mGotInventoryListener = new IabHelper.QueryInventoryFinishedListener() {

    public void onQueryInventoryFinished(IabResult result, Inventory inventory) {

        .....................

        if (inventory.hasPurchase(SKU_CONTENT)) {

            mHelper.consumeAsync(inventory.getPurchase(SKU_CONTENT), null);
        }
    }
};
Run Code Online (Sandbox Code Playgroud)


Den*_*nis 10

版本3:清除Google Play商店的缓存会让"android.test.purchased"再次可用.

  • @Richard通过“设置/应用程序管理器/”或将Google Play商店图标从菜单拖动到“信息”按钮(位于屏幕顶部)。最后,只需单击“清除缓存”按钮。 (2认同)

Shi*_*til 9

这就是我们如何使用Item

 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();
        }
    });
Run Code Online (Sandbox Code Playgroud)


Shw*_*rei 7

我用过adb shell:

adb shell pm clear com.android.vending
Run Code Online (Sandbox Code Playgroud)


siv*_*ivi 6

在我看来,如果您的程序不是为了消耗该项而设计的,则不需要调整代码以清除外部供应商的内存.这将使您的代码更加脆弱,然后您将花费大量时间来添加和删除不属于您的软件的代码,因此实现这样的解决方案是一个糟糕的设计.

清除android.test.purchased的最佳解决方案是

adb uninstall com.yourapp.name
Run Code Online (Sandbox Code Playgroud)

然后

adb shell pm clear com.android.vending
Run Code Online (Sandbox Code Playgroud)

我不需要清理现金并浏览我的应用程序设置或更改代码.我确实需要将adb添加到windows系统的路径变量中,这非常简单.所以是的,你需要使用你可能需要的adb,所以...

你只需添加你的C:\ ...\android-sdk\platform-tools; 在环境变量的windows路径中,我想在mac和linux os中也很简单.希望它可以帮助别人花几天时间在app appings中实现android.


小智 5

转到 Google Play Developer Console,Order Management从左侧打开菜单项并选择您要退款的订单。还要确保删除该权利。