谷歌应用内购买获取产品列表

Posted

技术标签:

【中文标题】谷歌应用内购买获取产品列表【英文标题】: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);

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

【问题讨论】:

有什么更新吗? 2019 年有什么更新吗? 这里有一个解决方法:***.com/a/66928444/11725250 【参考方案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

【讨论】:

以上是关于谷歌应用内购买获取产品列表的主要内容,如果未能解决你的问题,请参考以下文章

Apple 订阅或应用内购买在商店版本中不起作用 - 应用内产品详细信息未显示或获取

在 Flutter 中从 Play 商店获取产品时应用内购买崩溃

如何从 Apple 服务器获取应用内购买列表

应用被拒绝 - 应用内购买 - 需要开发者操作

iOS - 应用内购买 - 无效的产品标识符

无法在应用购买中从 iTunes Connect 获取产品标识符?