如何在Google Pay订阅续费触发时调用指定函数
检测Google Pay订阅续费事件的可行方案
1. 配置Google Play实时开发者通知(Server-to-Server,推荐)
这是最可靠的方式,订阅续费后Google Play会主动推送事件到你的服务端:
- 在Google Play Console的「开发者工具」>「实时开发者通知」中,配置你的服务端接收URL,确保该URL支持HTTPS。
- 当用户订阅续费成功时,Google会发送包含
SUBSCRIPTION_RENEWED事件类型的POST请求到你的URL,请求体为JWT格式消息。 - 用Google提供的公钥验证JWT签名,确认消息合法性后,解析订阅信息(用户ID、订阅ID、续费时间等),触发权限添加逻辑。
- 注意处理重复通知,服务端接口要保证幂等性,避免重复执行权限添加操作。
2. 客户端实时监听(辅助补充)
通过Google Play Billing Library在客户端监听订阅状态变化:
- 初始化
BillingClient时设置PurchasesUpdatedListener,订阅续费后Google Play会触发该监听器并返回PurchasesResult。 - 在监听器中获取更新后的订阅信息,调用后端接口同步状态,触发权限更新。
- 该方式依赖客户端在线,仅能作为服务端通知的补充方案。
- 示例代码片段:
val billingClient = BillingClient.newBuilder(context) .setListener { result, purchases -> if (result.responseCode == BillingClient.BillingResponseCode.OK && purchases != null) { for (purchase in purchases) { if (purchase.purchaseState == Purchase.PurchaseState.PURCHASED && !purchase.isAcknowledged) { // 同步续费信息到后端,触发权限更新 syncSubscriptionToServer(purchase) } } } } .enablePendingPurchases() .build()
3. 定期服务端轮询(兜底方案)
为避免推送通知丢失,可定期轮询Google Play Developer API:
- 调用
purchases.subscriptions.get接口,传入用户订阅ID和应用包名,获取最新订阅状态。 - 检查订阅的
autoRenewing状态和expiryTimeMillis,若到期时间更新则判定完成续费,触发权限添加逻辑。 - 建议轮询间隔设为1小时左右,避免频繁调用导致API配额超限。
内容的提问来源于stack exchange,提问作者Yohannes Sibarani
相关产品推荐
相关产品推荐

