Android:在App中购买Query不返回任何产品(skuDetails)

我正在开发我的第一个
Android应用程序.我真的在堆栈溢出上学到了很多东西.但我目前的问题,我还没有找到解决方案.

我试图实施“在应用内购买”.我做了以下事情:

1)在开发人员控制台中,我在alpha和beta测试中上传了签名的apk.我还在帐户中添加了一个测试用户,并用于测试我正在使用该帐户.此外,我添加了一些活跃状态的“在应用内产品(托管)”.

2)就像在http://developer.android.com/training/in-app-billing/index.html上描述的那样,我下载了必要的lib字段,从示例项目TrivialDrive中复制了代码,并遵循了导致编码的所有步骤:

// called when the app is started
public void setupConnectionToGooglePlay(final Context context) {
    this.context = context;

    mHelper = new IabHelper(context, base64EncodedPublicKey);

    mHelper.startSetup(new IabHelper.OnIabSetupFinishedListener() {
        public void onIabSetupFinished(IabResult result) {
            if (!result.isSuccess()) {
                // Oh no, there was a problem. --> no error message shown to
                // the user!
                Toast.makeText(context, "No connection to google:" + result, Toast.LENGTH_LONG).show();
            } else {
                Toast.makeText(context, "connection to google:" + result, Toast.LENGTH_LONG).show();
                // If connection is established:
                get List of all in App Purchase products
                getListOfInAppPurchaseProducts();
            }
        }
    });
}

执行此部分代码时,我得到结果,连接已成功建立.因此调用方法getListOfInAppPurchaseProducts().

private void getListOfInAppPurchaseProducts() {
    IabHelper.QueryInventoryFinishedListener mQueryFinishedListener = new IabHelper.QueryInventoryFinishedListener() {
        public void onQueryInventoryFinished(IabResult result, Inventory inventory) {
            if (result.isFailure()) {
                // no error message is shown to the user
                Toast.makeText(context, "Query not successful", Toast.LENGTH_LONG).show();
            } else {
                String message = result.getMessage();
                boolean isSuccess = result.isSuccess();
                // no success message is shown to the user
                List<String> skus = inventory.getAllOwnedSkus();
                Map<String,SkuDetails> map = inventory.getSKUMap();
                int size = map.size();

                Toast.makeText(
                        context,
                        "Message: " + message + "Query successful. Mapsize:" + size, Toast.LENGTH_LONG).show(); 

                WMGooglePlayConnection.this.inventory = inventory;

            }
        }
    };

    ArrayList<String> list = new ArrayList<String>();
    list.add("test");
    list.add("test2");
    mHelper.queryInventoryAsync(true, list, mQueryFinishedListener);
}

遗憾的是,返回的库存不包含任何SKU详细信息(即使查询成功).我检查了以下内容:

> productIds
>产品ID的状态(活动)
> base64EncodedPublicKey

为了测试,我使用了真实的设备(Samsung ACE 2).我将apk文件直接复制到设备上(不是从谷歌播放下载).这可能是个问题吗?

是否有可能通过模拟器获取SKU详细信息?

你知道我能检查什么吗?

如果有人可以帮助我真的很好……

最佳答案 我也碰到了这个.当Google Play Service 4.4退出时,我们的应用内结算信息就出现了问题.我想一两个回来.

要让您的应用内结算产品现在显示,您必须发布Alpha版本,但只有测试人员列表/群组中的人员才能看到它们.

在发布应用程序之后,测试人员可以从Google Play商店下载类似于此的链接.

https://play.google.com/apps/testing/

我希望这有帮助.

点赞