Google In App Billing在调用getPurchases时返回Null Purchase

时间:2016-06-22 11:17:08

标签: java android in-app-billing

我写了一个IAB(In App Billing)应用程序。高级购买将提交到谷歌仪表板,我也可以看到该项目的发票,用户不能两次购买此项目。所以这没关系。

但是,通过使用下面的代码,我无法理解用户是否为高级用户,因为 premiumPurchase 始终为 null 。 (我在设置完成的监听器中调用此方法)

mHelper.queryInventoryAsync(new IabHelper.QueryInventoryFinishedListener() {
            public void onQueryInventoryFinished(IabResult result, Inventory inventory) {

                if (mHelper == null) return;

                if (result.isFailure()) {

                    return;
                }


                Purchase premiumPurchase = inventory.getPurchase(SKU_PREMUIM);

                if(premiumPurchase!=null) {
                    //Toast.makeText(getApplicationContext(),"permuim",Toast.LENGTH_SHORT).show();

                    lblIsPremuim.setText("You are Premium");
                }
                else{
                    lblIsPremuim.setText("You are Not Premium");
                    Toast.makeText(getApplicationContext(),"not permuim",Toast.LENGTH_SHORT).show();
                }

            }
});

我已重新启动设备并清除Google Play的缓存,我确信我已使用正确的帐户登录。 base-64公钥肯定是正确的,我已阅读Stack-Over-Flow中的所有帖子,这些帖子已经提到过这个问题,但没有找到解决方案。我使用相同的版本名称和版本代码以及与上传的应用程序相同的密钥库。

1 个答案:

答案 0 :(得分:-1)

最后几天后,我通过操纵AndroidManifest.XML文件解决了这个问题:

1)我已经删除了下面的权限:(因为我原以为这与结算权限相冲突),但可能你可以留下这一行。

<uses-permission android:name="android.permission.INTERNET" />

2)我通知我的AndroidManifest.xml中有这样的行:

<uses-sdk
        android:minSdkVersion="21"
        android:maxSdkVersion="9" />

所以通过上面的陈述,min超过最大版本,它不符合逻辑,所以我把它改为下面:

<uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="15" />

之后我清理了项目并进行了重建并重新启动了设备。然后我可以完成所有购买......

非常重要 更新:您应该从Google商店应用登录注销。