当前位置: 首页 > 知识库问答 >
问题:

Google的IAB API3 getSku细节()方法返回失败5:开发人员错误

路伟
2023-03-14

我正试图将谷歌的应用内计费API3整合到我一直使用API2的html" target="_blank">代码中。

我对mHelper(IabHelper对象)的调用成功,所以我正在连接谷歌的服务器。似乎我可以确定拥有的物品,因为我的QueryInventoryFinishedListener会返回一个包含我所有购买物品的有效库存。我也能够执行购买。

但是,查询sku详细信息失败(getSku细节())。以下是Eclipse中所有与IabHelper相关的LogCat输出(我删除了包名和产品SKU),导致失败:

12-31 11:47:04.642: D/IabHelper(13633): Starting in-app billing setup.
12-31 11:47:04.832: D/IabHelper(13633): Billing service connected.
12-31 11:47:04.832: D/IabHelper(13633): Checking for in-app billing 3 support.
12-31 11:47:04.832: D/IabHelper(13633): In-app billing version 3 supported for com.XXXX.XXXX
12-31 11:47:04.832: D/IabHelper(13633): Subscriptions AVAILABLE.
12-31 11:47:04.842: D/IabHelper(13633): Starting async operation: refresh inventory
12-31 11:47:04.842: D/IabHelper(13633): Querying owned items, item type: inapp
12-31 11:47:04.842: D/IabHelper(13633): Package name: com.XXXX.XXXX
12-31 11:47:04.842: D/IabHelper(13633): Calling getPurchases with continuation token: null
12-31 11:47:04.912: D/IabHelper(13633): Owned items response: 0
12-31 11:47:04.912: D/IabHelper(13633): Sku is owned: com.XXXX.XXXX.item_one
12-31 11:47:04.922: D/IabHelper(13633): Sku is owned: com.XXXX.XXXX.item_two
...
(and 45 other items)
...
12-31 11:47:05.012: D/IabHelper(13633): Continuation token: null
12-31 11:47:05.012: D/IabHelper(13633): Querying SKU details.
12-31 11:47:05.012: D/IabHelper(13633): getSkuDetails() failed: 5:Developer Error
12-31 11:47:05.012: D/IabHelper(13633): Ending async operation: refresh inventory

这看起来不像是一个签名问题,因为我可以成功连接并购买。

有没有其他人在getSkuDetails()出现“开发者错误”消息时遇到过问题,而应用内计费的其他方面也在工作?

谢谢你抽出时间!

共有2个答案

仉宸
2023-03-14

SKU的数量并不总是原因。谷歌改变了开发者游戏商店的工作方式后,这种情况也开始出现。

以前,我们只需要上传已签名的APK而不发布它。

现在,有Beta和Alpha两个部分需要上传签名的APK并发布,以便用户在应用程序内购买。不要忘记将自己添加到测试人员列表中,并正确设置测试用户列表。

祖翰音
2023-03-14

我也经历过同样的问题。当库存中的SKU超过20个时,问题似乎就会出现。

解决方案是将SKU的详细信息分块获取。替换IabHelper中的querySkuDetails。java具有:

int querySkuDetails(String itemType, Inventory inv, List<String> moreSkus)
    throws RemoteException, JSONException {
    logDebug("Querying SKU details.");
    ArrayList<String> skuList = new ArrayList<String>();
    skuList.addAll(inv.getAllOwnedSkus(itemType));
    if (moreSkus != null) {
        for (String sku : moreSkus) {
            if (!skuList.contains(sku)) {
                skuList.add(sku);
            }
        }
    }

    if (skuList.size() == 0) {
        logDebug("queryPrices: nothing to do because there are no SKUs.");
        return BILLING_RESPONSE_RESULT_OK;
    }

    while (skuList.size() > 0) {
        ArrayList<String> skuSubList = new ArrayList<String>(
                skuList.subList(0, Math.min(19, skuList.size())));
        skuList.removeAll(skuSubList);

        Bundle querySkus = new Bundle();
        querySkus.putStringArrayList(GET_SKU_DETAILS_ITEM_LIST, skuSubList);
        Bundle skuDetails = mService.getSkuDetails(3,
                mContext.getPackageName(), itemType, querySkus);

        if (!skuDetails.containsKey(RESPONSE_GET_SKU_DETAILS_LIST)) {
            int response = getResponseCodeFromBundle(skuDetails);
            if (response != BILLING_RESPONSE_RESULT_OK) {
                logDebug("getSkuDetails() failed: "
                        + getResponseDesc(response));
                return response;
            } else {
                logError("getSkuDetails() returned a bundle with neither an error nor a detail list.");
                return IABHELPER_BAD_RESPONSE;
            }
        }

        ArrayList<String> responseList = skuDetails
                .getStringArrayList(RESPONSE_GET_SKU_DETAILS_LIST);

        for (String thisResponse : responseList) {
            SkuDetails d = new SkuDetails(itemType, thisResponse);
            logDebug("Got sku details: " + d);
            inv.addSkuDetails(d);
        }
    }
    return BILLING_RESPONSE_RESULT_OK;
}

这种方法将SKU分成18块。这对我很管用。

 类似资料:
  • 我想获得关于一个发布我的应用程序的Beta测试的程序的信息,但没有在商店上发布,因为他们不愿意进行任何发布。 我会解释哪一个是我的问题。我已经在Beta测试部分加载了apk,以便将您的用户发送到测试。 我不得不说,该应用程序目前没有加载的APK,在制造部分,然后该部分是空的,该应用程序没有发布。 在加载并在“beta testing”部分的链接部分进行了滚动后,我看到它给了我以下消息:“当你发布你

  • 我需要谷歌oauth谷歌登录我的opencart商店。我的应用程序仅请求以下作用域,应用程序是公共的。 https://googleapis.com/auth/plus.me https://googleapis.com/auth/userinfo.profile https://googleapis.com/auth/userinfo.email 这些不是敏感范围,在我的 oauth 同意屏幕上

  • 开发人员协议 请务必认真阅读和理解本《360浏览器应用开放平台开发人员协议》(以下简称"协议")中规定的所有权利和限制。在您参与360浏览器应用开放平台并使用应用中心分发产品时,您首先应接受本《协议》条款,如果您不接受本协议或违反了协议,奇虎360有权采取以下措施:驳回应用审核、下线产品、删除帐户、拒绝访问等。 本《协议》是开发人员与北京奇虎科技有限公司(下称"奇虎360")之间关于利用360浏览

  • Project V Project V 由以下几部分组成: V2Ray 核心: v2ray.com/core V2Ray 手册: v2ray.com 周边项目: 详见客户端 V2Ray 项目组 V2Ray 项目组最初是为了 V2Ray 核心的开发而建立,现在已推广到整个 Project V 生态环境。我们欢迎你加入组织参与开发。当然你也选择可以使用自己的 V2Ray 之外的环境。 加入 V2Ray

  • 本文向大家介绍测试人员和开发人员区别?相关面试题,主要包含被问及测试人员和开发人员区别?时的应答技巧和注意事项,需要的朋友参考一下 ①人员不同 测试:开发人员和测试人员 开发:只有开发人员 ②所处阶段不同 测试:贯穿整个软件开发生命周期 调试:在软件开发编码阶段以及测试过程中对BUG进行调试 ③对bug处理结果不同 测试:只找出错误,不解决 调试:找出错误并解决

  • 我正在尝试在同一台机器上设置ElasticSearch、Logstash和Kibana。我设置了: elasticsearch-1.4.0 logstash-1.4.2 kibana-3.1.2 根据本文,我遵循了所有步骤:http://aarvik.dk/a-bit-on-elasticsearch-logstash-kibana-the-elk-stack/ 我运行了ElasticSearch