基于Google Cloud Pub/Sub实现Android订阅通知后端监听的分步指导请求
基于Google Cloud Pub/Sub实现Android订阅通知后端监听的分步指导请求
Hey there, I totally get how frustrating it is when you're stuck connecting your Android subscriptions to your backend and can’t find clear, actionable steps—let’s walk through this properly using Google Cloud Pub/Sub, which is Google’s official recommended way for real-time subscription event notifications.
第一步:在Google Play开发者控制台完成基础配置
- 打开你的Google Play Developer Console,找到对应的应用,进入「Monetization > Subscriptions」页面
- 切换到「Subscription settings」标签,找到「Cloud Pub/Sub」板块
- 点击「Set up」,选择一个已有的Google Cloud项目(如果没有就新建一个),确保你的Play账户拥有该Cloud项目的编辑权限
- 启用Cloud Pub/Sub API(控制台会自动提示你完成这一步),保存配置后,Google Play就会开始把订阅相关的事件推送到你指定的Pub/Sub主题了
第二步:在Google Cloud控制台创建Pub/Sub主题与订阅
- 进入Google Cloud Console,打开你刚才关联的项目
- 搜索「Cloud Pub/Sub」进入服务页面,点击「Create topic」,给主题起个好记的名字(比如
android-subscription-events) - 为这个主题创建订阅,这里分两种模式:
- Push模式:适合你的后端是HTTP/HTTPS服务,Google会直接把事件推送到你指定的后端端点(比如
https://your-backend-domain.com/subscription-webhook)。记得配置签名验证(后面会讲),防止伪造请求。 - Pull模式:适合后端是后台服务,需要定期主动拉取事件。如果选这个,直接创建拉取型订阅即可。
- Push模式:适合你的后端是HTTP/HTTPS服务,Google会直接把事件推送到你指定的后端端点(比如
第三步:后端配置签名验证(重中之重)
Google Play推送的事件会带有签名,你必须验证签名才能确保请求是合法的,防止恶意伪造:
- 从Google Play Developer Console的「API access」页面下载Google的公钥,或者通过Pub/Sub的验证机制获取对应密钥
- 在你的后端代码里实现验证逻辑,这里给个Java的简化示例(其他语言逻辑类似):
// 注意:实际开发要处理公钥缓存、异常捕获等细节 PublicKey publicKey = loadGooglePublicKeyFromFile(keyId); Signature signature = Signature.getInstance("SHA256withRSA"); signature.initVerify(publicKey); signature.update(requestBody.getBytes(StandardCharsets.UTF_8)); // 从请求头获取签名信息 String signatureHeader = request.getHeader("X-Goog-Signature"); boolean isValid = signature.verify(Base64.getDecoder().decode(signatureHeader)); if (!isValid) { throw new SecurityException("Invalid subscription event signature"); }
第四步:解析并处理订阅事件
Google Play推送的事件是JSON格式,包含关键信息,你需要解析后执行业务逻辑:
- 提取核心字段:
subscriptionId:用户的订阅IDpurchaseToken:可用于调用Google Play Developer API获取更详细的订阅信息eventType:事件类型,比如SUBSCRIPTION_ACTIVATED(订阅激活)、SUBSCRIPTION_EXPIRED(订阅过期)、SUBSCRIPTION_RENEWED(订阅续费)等profileId:用户的Google Play账户ID,用来关联你后端的用户账号
- 根据事件类型处理业务:
- 激活/续费事件:给用户开通或延长服务权限
- 过期/取消事件:收回用户的服务权限
第五步:测试整个流程
- 在Google Play Developer Console里开启「Test purchases」,创建测试订阅套餐
- 用测试账户在Android应用里完成订阅支付操作
- 检查Pub/Sub主题是否收到事件:
- Push模式:查看后端的请求日志,确认事件被正确接收
- Pull模式:用gcloud命令行工具测试拉取:
gcloud pubsub subscriptions pull android-subscription-events-sub --auto-ack
- 注意:测试时后端端点必须是公网可访问的,本地测试可以用ngrok之类的工具临时暴露端口
第六步:错误处理与幂等性保障
- 后端收到Push请求后,必须返回
200 OK状态码,否则Google会重复推送事件 - 处理重复事件:每个事件都有唯一的
eventId,后端可以用这个ID做幂等校验,避免重复执行相同的业务逻辑 - 配置Pub/Sub的重试策略,比如设置消息过期时间,防止无效事件无限重试
如果还是找不到某个配置入口,多留意Play Console的菜单变化(有时候界面更新会调整位置),核心是确保你的Google Cloud项目和Play应用是正确关联的——这是整个流程的前提。
备注:内容来源于stack exchange,提问作者MohammedIsmael
相关产品推荐
相关产品推荐

