【问题标题】:Google in app purchasing get products list谷歌应用内购买获取产品列表
【发布时间】:2013-05-09 00:25:26
【问题描述】:

我从here 找到以下代码来从 google play store 获取产品列表

ArrayList skuList = new ArrayList();
skuList.add("premiumUpgrade");
skuList.add("gas");
Bundle querySkus = new Bundle();
querySkus.putStringArrayList(“ITEM_ID_LIST”, skuList);

有没有办法获取动态产品列表?这里是硬编码的。当我在应用启动后添加新产品时会发生什么?

【问题讨论】:

标签: android google-play-services android-billing


【解决方案1】:

目前无法使用 Google API。

创建一个包含当前SKUsJSON 文件并将其放置在某个服务器上。

在您的应用中,首先从服务器 URL 加载此文件,然后使用此 SKUs 列表通过 Google API 检索产品详细信息。

致 Google:为此提供功能,SHAME ON YOU!

【讨论】:

  • 尚不可用,截至 2015 年 10 月 16 日。对你、谷歌和苹果感到羞耻。大声笑
  • @Dinh,请给我参考链接,找不到。
  • developer.apple.com/library/ios/documentation/… 没有运行时机制来获取 iTunes Connect 中为特定应用程序配置的所有产品的列表。您负责管理您应用的产品列表并将该信息提供给您的应用。如果您需要管理大量产品,请考虑使用 iTunes Connect 中的批量 XML 上传/下载功能。
【解决方案2】:

如果您不想实现从自己的服务器获取产品列表的逻辑,另一种选择是使用预定义的“虚拟”产品 ID,例如产品 ID 插槽:

private static final String[] PRODUCTIDS = {"product1", "product2", "product3", etc. };

getSkuDetails 函数将简单地为不存在的产品 ID 返回 null。因此,如果您不希望您的产品列表变化太频繁或太多,那么您可以在您的应用程序中定义少量产品 ID,并跳过 getSkuDetails 返回的空值。

如果您想添加新产品,只需使用开发者控制台中下一个未使用的插槽定义的 id,您的应用将在不更新应用的情况下将其列出。

删除产品可能会很棘手,因为仍会返回非活动和已删除的产品 ID,因此您可以使用其描述字段将产品标记为已删除 - 使用预定义的常量,如“不可用”并检查其是否存在在您的应用程序中。如果产品描述等于这个常数,直接跳过它,不要列出它。

我知道,我知道。这是一个肮脏的黑客。但它有效。

【讨论】:

  • 如果您使用示例 Google 项目中的帮助程序类,那么您可以通过调用 IabHelper.queryInventoryAsync(final boolean querySkuDetails, final List<String> moreSkus, final QueryInventoryFinishedListener listener)(或同步版本,如果您愿意)来查询产品,只需将 SKU 列表指定为神秘moreSkus 参数。无论如何,您都需要获得以前购买的产品,因此很难避免此调用。说得客气一点还是很丑。
【解决方案3】:

这是不可能的。如果您能够获取更新的应用内产品列表,您将如何在不更改应用代码的情况下提供这些新产品?如果您更改产品列表,那么您必须为处理新产品的应用发布更新。

在不更改应用代码的情况下获取新产品的唯一原因是更改产品本身的价格,但这意味着违反 Google 条款和条件

【讨论】:

  • 处理应该留给开发人员。许多开发人员在服务器端处理应用内功能。顺便说一句,这不是 Google 关心的问题。
【解决方案4】:

现在可以使用Inappproducts: list API:

列出 Android 应用的所有应用内商品,包括订阅和托管的应用内商品。

另外,请阅读使用上述 API 所需的 Authorization

【讨论】:

    【解决方案5】:

    您可以执行此操作的一种方法是在数据库(如 Firebase DB)中创建所有产品 ID 的副本,query 这些 ID 在您的应用中,并将它们添加到字符串列表中。然后最后将此列表传递给 SkuDetailsParams 的 setSkusList() 方法:

    SkuDetailsParams params = SkuDetailsParams.newBuilder()
                            .setType(INAPP)
                            .setSkusList(skuList) //pass the list there
                            .build();
    

    【讨论】:

      【解决方案6】:

      我猜,最简单的方法是使用 Firebase Remote Config,其中 skuList 会在发布到所有设备后自动更新。

      检查远程配置以实现: https://firebase.google.com/docs/remote-config/use-cases

      【讨论】:

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