如何在应用计费中实现自动续订订阅 google play

How to implement auto renew subscription in app billing google play

我正在研究在 google play 的应用计费中实现自动续订订阅的方法。我阅读 https://developer.android.com/google/play/billing/billing_subscriptions.html 并且看到

Billing continues indefinitely at the interval and price specified for the subscription. At each subscription renewal, Google Play charges the user account automatically, then notifies the user of the charges afterward by email. For monthly and annual subscriptions, billing cycles will always match subscription cycles, based on the purchase date. (Seasonal subscriptions are charged annually, on the first day of the season.)

When the subscription payment is approved, Google Play provides a purchase token back to the purchasing app through the In-app Billing API. Your apps can store the token locally or pass it to your backend servers, which can then use it to validate or cancel the subscription remotely using the Google Play Developer API.

那么我的服务器有什么方法可以知道用户订阅的续订时间吗?而不是 google 播放发送新账单订阅到 android 应用然后 android 应用将这个新账单发送到我的服务器只是为了验证。

当用户的订阅续订时,google play 能否向我的服务器发送通知,例如通过电子邮件通知用户?我想 google 播放 向我发送用户订阅已自动续订的通知,以便我的后端更新他们在应用程序增加中的订阅到期。不需要 android 每次用户打开商店时应用程序都必须检查账单以检查是否有来自 goole play 收费自动化的新账单。实现了吗?

我的同事

  1. Google收取新的周期订阅并通知我的服务器{正文如bundId,bill,product_id或订阅包名称,到期日期...),并发送邮件给用户关于他们更新的订阅自动化。
  2. 我的服务器确定用户的更改订阅并通过 google 播放 api 在应用程序购买中进行验证,如果验证有效,则在您的应用程序中更改过期包订阅。
  3. 在我的数据库中存储最新的账单

这可能吗?

[更新] 推荐自 goolge play api doc

Recommendation: Include business logic in your app to notify your backend servers of subscription purchases, tokens, and any billing errors that may occur. Your backend servers can use the server-side API to query and update your records and follow up with customers directly, if needed.

如何实施 google api、任何文档或教程的推荐?

我目前遇到了完全相同的问题。 Google 的概念没有很好地构思。可以通知您的后端服务器有关金融交易的信息(请参阅 here),但我不建议这样做。您的业​​务交易依赖于大量 Google 服务和您的服务器正常运行时间。如果出现任何问题或出现故障或其他情况,您将不会收到通知,您的后端业务逻辑将不再起作用。

您提到的 Google 的推荐也很糟糕。如果存在自动续订(向您的应用程序提供新的 purchaseToken)并且用户从未打开您的应用程序,会发生什么情况。那么新的订阅数据将永远不会传输到您的服务器。如果您从未获得新令牌,您如何检查用户是否仍然是订阅者,因为这个有限的 Google Play 开发者 API 愚蠢地需要一个 purchaseToken 作为参数(参见 here ) 只要用户在自动续订后至少没有打开您的应用程序一次(将其提交到您的服务器),您就永远不会得到。

我想这样实现:
1.) 我通过cron job不断检查购买记录。购买记录是一个数据库条目,其中包含来自初始订阅的所有数据(orderId、purchaseToken 等等,security validation process on the server 所需的所有数据)。每条购买记录都连接到我后端系统中的用户帐户(某些用户 ID)。只要purchaseRecord的autoRenewing属性不为false,订阅就有效。即使超过了 expiryTimeMillis,这个用户仍然可以有一个有效的订阅,因为我上面描述的用例:Subscription will be auto-renewed by Google,但是用户永远不会打开应用程序,因此不会将传输令牌发送到您的服务器,您仍然不会收到有关订阅更新的通知。

2.) 如果用户在任何时候取消订阅,autoRenewing 将在任何时候为假。这意味着订阅确实会在 expiryTimeMillis 结束。

3.) 当用户打开您的应用程序并将新的 purchaseToken 传输到您的后端时,您将获得一条新的购买记录,该记录再次连接到使用他的用户 ID 的用户帐户。用户现在大概会有2条购买记录。旧的和新的。如果是这样,您可以删除旧的,并在步骤 1 中对新的购买记录重复相同的过程。

到目前为止我还没有实现这个概念,所以我不知道这是否真的可以这样工作。也许这可以以不同的方式起作用,但也许这是朝着正确方向迈出的一步。

我不认为,依靠每天的 cronjob 是解决这个问题的可行方法,它很麻烦,你还必须考虑当你的应用程序处理太多请求时的情况,你有一个限制使用 android 开发人员 api 进行的交易的数量。更好的实施方式是使用 google 的建议。哪些统计数据:

... 注意:由于配额限制,不建议通过定期轮询 Google Play 开发者 API 来检查状态,而不是利用实时开发者通知。 ...

在这里,您可以关注以下url 并实施自动续订订阅。