在 Android 中检查应用内订阅的状态

Posted

技术标签:

【中文标题】在 Android 中检查应用内订阅的状态【英文标题】:Check the status of In-App Subscription in Android 【发布时间】:2015-11-04 14:26:18 【问题描述】:

我创建了一个应用程序,其中有应用程序内购买,每月自动续订。在第一次成功付款时,我调用了一个网络服务,我在其中让用户进入高级课程。

现在如果用户从谷歌服务器手动取消了付款,我怎么知道用户已经取消了他/她的订阅。

是否有一些 php 代码查询或来自 android 我必须在后台调用某些东西来检查状态?

谢谢你

【问题讨论】:

【参考方案1】:

我还没有对此进行测试,但是您可以使用 INAPP_PURCHASE_DATA 中的autoRenewing 字段吗?

如果为 true,则订阅处于活动状态,并将在下一个计费日期自动续订。 如果为 false,则表示用户已取消订阅

http://developer.android.com/google/play/billing/billing_reference.html#getBuyIntent

显然,添加了autoRenewing 字段或至少记录了in the beginning of 2015。

【讨论】:

【参考方案2】:

您可以通过

在应用内查看已购买的订阅

编辑:订阅使用“subs”,inapp-purchases使用“inapp”,例如:

应用内购买:mService.getPurchases(3, getPackageName(), "inapp", null);

订阅:mService.getPurchases(3, getPackageName(), "subs", null);

另请参阅Querying for Purchased Itemshttp://developer.android.com/google/play/billing/billing_integrate.html

因此,您可以在应用中实施一项任务,检查用户是否仍有订阅。如果没有,您可以删除高级状态。此外,这些信息可能对您有用:

当用户取消订阅时,Google Play 不会为当前的结算周期提供退款。相反,它允许用户在当前计费周期结束之前访问已取消的订阅,届时它会终止订阅。例如,如果用户购买了每月订阅并在周期的第 15 天取消它,Google Play 将认为该订阅在第 30 天(或其他日期,具体取决于月份)结束之前有效。

来源:http://developer.android.com/google/play/billing/billing_subscriptions.html 下 subscription cancelled

希望对你有帮助

Edit2:因为我的回答中提到的AIDL库在未来被弃用和停用,建议切换到新的Google Play Billing Library。

【讨论】:

你的建议是错误的。 mService.getPurchases(3, getPackageName(), "inapp", null);用于一次性购买。您应该使用“subs”而不是“inapp”来获取订阅 感谢您提供的信息。我更正了我的答案:-) 这些方法在新的 Play 结算库中不可用。有什么办法吗? 谢谢。我正在获取旧的缓存购买结果。我有 gmail 收据,续订成功。获得最新结果需要多长时间。有什么想法吗?【参考方案3】:

检查 getPurchases() 方法here。或者,如果您使用 Android Studio 并下载了源代码,只需在 IInAppBillingService.getPurchases 方法上按 Ctrl + Q

【讨论】:

从 google play 应用程序取消后,它给出的是购买状态而不是订阅状态。

以上是关于在 Android 中检查应用内订阅的状态的主要内容,如果未能解决你的问题,请参考以下文章

无法在服务器上验证 android 应用内订阅

我是不是正确执行这些步骤来检查用户的应用内结算订阅?

获取android订阅状态,403失败

如何在 Android 中测试 Google Play 计费订阅(非应用内购买)

使用 Flutters 应用内购买插件检查订阅有效性?

尝试订阅产品时需要应用内计费 android 返回身份验证