在我的 Android 应用中查询应用内购买

Query InApp purchases within my Android app

我有一个 Android 应用,用户可以在其中购买 1 个应用内产品来解锁某些功能。

我已在以下位置广泛阅读了该指南:https://developer.android.com/google/play/billing/billing_library_overview#java

我了解,为了让用户购买 inapp 产品,我必须:

这就是事情变得混乱的地方。从 Google 文档的角度来看,工作已经完成,他们向您解释了如何 retrieve/purchase/and 验证用户付款。但是,没有任何地方解释如何在应用程序启动期间记住付款并解锁付费功能。

文档指出:

To retrieve information about purchases that a user makes from your app, call the queryPurchases()

所以看起来应用程序不需要记住任何东西,只需在启动时调用 queryPurchases() 并检查 SKU 是否存在(用户已经支付)或不存在(用户还没有'我没有购买该应用程序的付费版本)。

所以我的应用程序就是这样做的,在启动时调用 queryPurchases() 并检查 SKU 是否存在。 这种方法非常有效,即使应用程序离线启动时也是如此。然而,一些用户抱怨有时应用程序无法在付费模式下启动,因为(我调试了代码)当设备离线时函数 queryPurchases() 失败(有时)。会不会是 queryPurchases() 正在调用本地 Google Play 缓存,这可能会由于某种原因而无法跟踪之前的购买记录? (缓存清除等...)

在应用程序启动时记住用户购买并启用付费功能的合适方法是什么?

它多久发生一次?我的看法是 Google Play 客户端负责缓存,因此如果您仅依赖此服务,则没有直接的方法来处理它。如果用户重新安装或更改他们的设备,这可能会造成麻烦。

另一种方法是构建您自己的后端,如果您想要发展您的应用程序,这将是必要的。

您可以使用 onPurchasesUpdated 的结果保留您自己的 "cache"(SharedPreferences 或数据库)并使用 queryPurchaseHistoryAsync。当应用程序首次启动时,如果您的缓存告诉用户购买了产品并同时调用 queryPurchaseHistoryAsync 以获取用户为每个 SKU 进行的最新购买,则您可以显示付费内容,当 onPurchaseHistoryResponse 如果购买过期,您可以更新缓存并隐藏付费内容。

另请考虑,出于安全考虑,建议您在后端进行购买验证。

如果您不想管理自己的服务器,可能值得使用像 RevenueCat 这样的工具,它提供 purchase/subscription 后端即服务。