如何确定用户是不是取消了 Google Play 订阅?

Posted

技术标签:

【中文标题】如何确定用户是不是取消了 Google Play 订阅?【英文标题】:How to determine if user cancels Google Play subscription?如何确定用户是否取消了 Google Play 订阅? 【发布时间】:2016-10-04 19:06:27 【问题描述】:

即将在我们的 android 应用中构建订阅产品,但对于了解已取消订阅的最佳方式有点不清楚。我们计划让用户取消的唯一方法是让他们前往 Google Play 商店并明确取消,但在这种情况下,我们的后端不会收到通知。

Google Play 开发者 API 文档明确规定您不得向 API 查询所有订阅的状态,那么我们应该如何知道哪些用户取消了他们的订阅?

非常感谢任何帮助!

【问题讨论】:

【参考方案1】:

根据应用内订阅文档,没有检测用户何时取消订阅的机制。因为它不会立即取消。相反,它会等待订阅到期的周期结束。

摘自文档 (source)

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

当用户取消订阅时,应用不会收到任何通知。

订阅行为是每当您在应用程序中查询库存时,如果订阅有效,将返回 SKU。订阅到期后,查询库存时不会返回 SKU。

根据link中的文档

只要订阅接近尾声,就可以运行批处理查询

摘自文档 (source):

仅在到期时查询订阅状态 — 一旦您的服务器 已检索到订阅令牌的到期日期,它应该 不再向 Google Play 服务器查询订阅状态 直到订阅即将到期或已超过到期日期。 通常,您的服务器每天都会运行批处理查询来检查 过期订阅的状态,然后更新数据库

以下服务器 api 可让您查询订阅状态:

https://developers.google.com/android-publisher/api-ref/purchases/subscriptions#resource-representations

变量autoRenewingcancelReason 会通知您订阅是否已取消。

通过使用上述 API,您将能够实现一个系统,其中可以查询即将到期的订阅状态,然后确定它们是否被取消。

有关取消订阅的详细信息,请访问link。

注意: 文档指出,只要用户拥有有效订阅,您就应该继续提供内容。如果您打算在有人取消订阅的情况下拒绝访问该内容,将违反 Google 政策

摘自文档 (source)

重要提示:在任何情况下,您都必须继续提供符合以下条件的内容 您的订阅者通过他们的订阅购买,只要 任何用户都可以访问它。也就是说,您不得删除任何 内容,而任何用户仍然对其有有效订阅,即使 该订阅将在当前计费结束时终止 循环。

【讨论】:

谢谢阿尼鲁达。如果用户的订阅每年续订一次,但他们按月付费,我们是否应该在他们的账单日期按月查询 API 以获取过期订阅? 我认为 Google Play 不允许您按月支付年度订阅费用。如果有,你能提供它的链接吗? 我认为您是对的,刚刚看到:“对于月度和年度订阅,计费周期将始终与订阅周期匹配,具体取决于购买日期。”在developer.android.com/google/play/billing/… 我不知道真实订阅是否正确,但是当我用测试帐户测试并取消订阅时,即使在到期日之后,它仍然会被退回。 这里有一些资源,用于获取更多用户订阅数据的最新说明,包括如何实现实时开发人员通知 (RDTN):developer.android.com/google/play/billing/… 示例应用:github.com/android/play-billing-samples/blob/…【参考方案2】:

现在似乎可以接收有关订阅更改(续订、取消...)的服务器端通知:

应用内结算 API 提供服务器推送通知,使开发人员能够监控 Play 管理的订阅的状态变化。

查看此页面了解更多详情:https://developer.android.com/google/play/billing/billing_subscriptions.html#realtime-notifications

【讨论】:

锚点realtime-notification 不再存在。不过,可以在此处找到类似的信息:developer.android.com/google/play/billing/… 但是在那种情况下,我应该如何知道哪个用户取消了订阅(意味着我们服务器的用户ID)

以上是关于如何确定用户是不是取消了 Google Play 订阅?的主要内容,如果未能解决你的问题,请参考以下文章

无法确定 Android 设备上是不是安装了 Google Play 商店

如何在 Google Play Developer Console 中取消发布应用

Google play billing API:如何了解用户是不是订阅?

如何在 Google Play 开发者控制台中取消测试订阅

Google play 游戏服务登录失败

使用 Google Play 游戏服务联系用户