【问题标题】:Android: In App purchase Query does not return any products(skuDetails)Android:应用内购买查询不返回任何产品(skuDetails)
【发布时间】:2014-05-29 17:01:26
【问题描述】:

我正在开发我的第一个 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

为了进行测试,我使用了真实设备(三星 ACE 2)。我将apk文件直接复制到设备(不是从google play下载的)。这会是个问题吗?

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

你知道我可以检查什么吗?

如果有人能帮助我,那就太好了……

【问题讨论】:

  • 是的,这里也一样。我猜这是来自谷歌的东西,因为对我们来说它曾经在一周前工作。如果你找到任何解决方案,请写在这里。

标签: android in-app-purchase


【解决方案1】:

我也遇到了这个问题。当 Google Play 服务 4.4 发布时,我们的应用内计费功能就崩溃了。我想一两个星期回来。

要让您的应用内计费产品立即显示,您必须发布您的 Alpha 版本,但只对您的测试人员列表/组中的人员可见。

在发布应用程序后,测试人员可以从 Google Play 商店下载该应用程序,其中包含与此类似的链接。

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

我希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多