我正在通过Google Play在应用结算中实施自动续订订阅的研究方法。我看了https://developer.android.com/google/play/billing/billing_subscriptions.html并看到了
结算将按照订阅的间隔和价格无限期地继续。在每次续订时,Google Play会自动向用户帐户收费,然后通过电子邮件通知用户这些费用。对于月度和年度订阅,结算周期将始终根据购买日期与订阅周期匹配。 (季节性订阅每年收费,在季节的第一天收费。)
批准订阅付款后,Google Play会通过应用内结算API向购买应用提供购买代币。您的应用可以在本地存储令牌或将其传递给后端服务器,后端服务器可以使用它来使用Google Play Developer API远程验证或取消订阅。
为什么我的服务器知道何时更新用户的订阅?在Android应用程序将此新帐单发送到我的服务器以进行验证后,而不是谷歌播放向Android应用程序发送新的帐单订阅。
google play可以在用户续订时向我的服务器发送通知,例如通过电子邮件通知用户吗?我想谷歌播放发送给我一个通知,用户的订阅自动续订,以便我的后端将更新到期应用程序增加他们的订阅。不需要Android应用程序必须检查每次用户打开商店的账单,以检查来自goole播放充电自动化的新账单。它实现了吗?
我的工作跟进
这可能吗?
[更新] 从goolge play api doc推荐
建议:在您的应用中包含业务逻辑以通知您的 订阅购买,令牌和任何计费的后端服务器 可能发生的错误。您的后端服务器可以使用服务器端 API用于查询和更新您的记录并跟进客户 直接,如果需要的话。
如何实施google api推荐,任何文档或教程?
答案 0 :(得分:2)
我目前的问题完全相同。谷歌的概念并没有得到很好的构思。有可能通知您的后端服务器有关财务交易(请参阅here),但我不建议这样做。您将业务交易依赖于大量Google服务和服务器正常运行时间。如果出现任何问题或出现问题,您将不会被告知,并且您的后端业务逻辑不再起作用。
你提到的Google推荐也很糟糕。如果存在auto-renawal(向您的应用发送新的purchaseToken)并且用户从未打开您的应用,会发生什么。然后,新的订阅数据将永远不会传输到您的服务器。如果您从未获得新令牌,那么如果用户仍然是订阅者,您如何检查,因为这个有限的Google Play Developer API愚蠢地需要一个purchaseToken作为参数(参见here),你永远不会得到用户在自动续订后至少不会打开您的应用程序一次(将其提交到您的服务器)。
我想以这种方式实现这一点:
1.)我通过cron job不断检查购买记录。购买记录是一个数据库条目,其中包含来自初始订阅的所有数据(orderId,purchaseToken等,security validation process on the server所需的全部内容)。每个购买记录都连接到我的后端系统中的用户帐户(某些UserID)。只要purchaseRecord的 autoRenewing 属性不为false,订阅就有效。即使超出 expiryTimeMillis ,这个用户仍然可以拥有有效的订阅,因为我上面描述的用例:Google会自动续订订阅,但用户永远不会打开应用,因此,没有传输令牌发送到您的服务器,您仍然不知道订阅更新。
2。)如果使用取消了他的订阅, autoRenewing 在任何时候都是假的。这意味着订阅确实将以 expiryTimeMillis 结束。
3。)当用户打开您的应用并将新的purchaseToken转移到您的后端时,您将获得一条新的购买记录,该记录再次使用其用户ID连接到该用户帐户。用户现在可能有2个购买记录。旧的和新的。如果是这样,您可以删除旧的,并在步骤1使用新的购买记录重复相同的过程。
到目前为止我还没有实现这个概念,所以我不知道这是否真的像这样。也许这可以以不同的方式起作用,但也许它是迈向正确方向的一步。
答案 1 :(得分:0)
我不认为,依靠每天的 cronjob 是解决这个问题的可行方法,它很混乱,你还必须考虑你的应用程序处理太多请求的情况,你有交易限制使用android开发人员的api制作的。实现它的更好方法是使用谷歌的推荐。哪些统计数据:
... 注意:由于配额限制,不建议通过定期轮询 Google Play Developer API 而不是利用实时开发者通知来检查状态。 ...
答案 2 :(得分:0)
在这里,您可以按照以下网址 How to get expiry date for Subscription with client side in Android? 并实现自动续订。