Android应用内购买订阅状态变化回调

16

我正在编写一个支持应用内订阅的应用程序。这些订阅将使我的用户能够使用一些服务和福利,超出了安卓世界之外。我知道可以使用Google Play开发者API来查询订阅的状态,但由于所提供的服务和福利的性质,这样做并不是很方便。我想知道是否有一种方法在订阅状态改变时得到通知。例如,类似于Web钩子的东西。


据我所知,在网络上并没有像其他支付处理器那样使用Webhooks。 你是用什么方式实现的呢? - Bogdan Zurac
到目前为止我还没有。我唯一的想法是在我的服务即将被使用时查询订阅状态。但我不想通过查询Google Play来延迟我的服务。这是我的主要顾虑,但我想我不得不接受它。 - papadi
2个回答

11

我本想回复你的评论,但似乎我的回复太长了。此外,这也是对你问题的一种回答,所以我认为直接把它作为一个答案发出去可能是个好主意。或许这甚至能解决你的问题。

关于你的评论,其实你不一定需要这样做。现在,我不知道你的系统需求,但我会分享我的经验,希望能对你有所帮助。

在你的服务器上保存UsersSubscriptions(数据库表)。在Subscriptions表上有一个check_at列,另外还有一个renew_at列。假设用户在1月1日创建了一个月的订阅。在那一天,购买完成后,你从Android调用你的服务器,保存订阅详情,然后将renew_at设置为2月1日,而将check_at设置为2月4日,考虑到你在Google Play开发人员控制台中将事务失败延迟3天。这样,如果支付失败,用户在2月1日到2月3日有时间更改信用卡信息。然后在4日,你将检查Google Play API的订阅详细信息。但不要在2月1日到4日之间禁用高级功能。如果订阅被取消,则在4日后禁用它。这样,高级内容既不会延迟也不会被篡改。如果API返回的订阅结束日期在未来,则表示已经续订了,因此你应该保持高级激活。那么,你如何每月的4日进行检查呢?使用某种计划程序在数据库上安排任务。

这样一来,你就不需要依赖Webhooks了。虽然我同意,Webhooks可能更有效率,而且可能更容易实现。

如果你有什么问题或者有什么漏洞,请告诉我。


4
谢谢您的回答@Andrew,我之前在Stripe中实现了订阅功能,现在使用Google应用内产品时感觉像石器时代。 - agusgambina
1
我和你一样 :) 刚刚完成了Stripe,然后是苹果,现在是谷歌。 - Kiksen
1
我个人认为,由于实时通知(在iTunes中就像一个悲伤的笑话)的存在,谷歌的订阅方式比苹果更容易实现。在我们的应用程序中实现苹果的订阅花费了我们团队大约5倍的时间,而且最终结果还包含了更多的错误。 - Najki
2
回到Bogdan的解决方案。用户可以升级/降级订阅(如果有多个产品可用),或者退款终止订阅。因此,有时您可能希望取消或替换他/她的高级功能。这就是为什么每月查询Google的API不足够的原因。我建议实施实时通知,并仍然定期查询API作为后备,以防任何RTN请求未命中您的服务器。 - Najki

10
请看使用Google Cloud的PubSub服务发送实时通知,通知内容与支付/订阅事件相关,如新购买、续订、取消等。它包含可用于从API检索附加信息的令牌,就像您现在所做的那样。此外,您还可以配置此PubSub订阅以在接收到每条消息时调用自定义Webhook(仍需要查询PubSub)。请参阅实时开发者通知

我已经设置好了“实时通知”,它也正常工作。我可以获得令牌并获取交易信息。但是它不包含任何用户信息。我该如何知道哪个用户的交易? - boygiandi
3
您可以在应用内进行的初始购买中使用developerPayload参数将用户ID传递给Google。接下来,当您收到PubSub通知时,它将包含purchaseToken,并且当使用此purchaseToken查询Google API以获取订阅详细信息时,您将获得developerPayload值。 - Najki

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接