使用Firebase Auth的游戏如何有效关联IAP收据?
解决方案:IAP与Firebase用户关联的实现方案
1. 服务器端验证并关联购买记录到Firebase UID
核心逻辑是完全绕过客户端本地状态,所有IAP校验通过后端完成:
- 用户完成购买后,客户端将
purchaseToken、productId等购买凭证发送到Firebase Cloud Functions。 - 云函数调用Google Play Developer API验证凭证有效性,确认订阅状态、非消耗品归属。
- 验证通过后,将购买详情(产品ID、到期时间、状态)写入Firebase实时数据库/Firestore,直接关联到当前请求的
context.auth.uid(云函数可自动获取登录用户的UID)。 - 用户换设备或切换Google账号登录同一Firebase用户时,客户端直接从Firebase数据库读取关联的购买记录,无需依赖当前设备的Google账号状态。
- 针对订阅,用云函数定时触发器定期调用Play API刷新状态,同步到数据库保证实时性。
2. 绑定Google Play账号到Firebase用户(保留原有Auth方案)
无需替换现有登录方式,通过关联机制实现绑定:
- 在客户端添加「绑定Google Play账号」功能,用户登录Firebase后,可关联当前设备的Google Play账号(通过Google Sign-In获取账号ID)。
- 将Google Play账号ID存入Firebase用户的
customClaims或用户文档中。 - 用户发起购买后,客户端将购买凭证、Firebase UID、Google Play账号ID一同发送到云函数,验证时校验凭证对应的Google账号ID是否与绑定的一致,确保购买归属该Firebase用户。
- 后续用户换设备登录同一Firebase账号时,可通过绑定的Google Play账号ID,由云函数调用Play API查询历史购买记录。
3. 改用Google Play登录作为Firebase Auth主方式(可选)
如果业务允许单一登录方式,这是最直接的方案:
- 用户通过Google Play登录Firebase,此时Firebase UID与Google Play账号直接关联。
- 购买IAP后,客户端将凭证发送到云函数,验证时直接用该Firebase用户关联的Google账号ID查询Play API,确保购买与Firebase用户一一对应。
- 该方案限制了登录方式,但彻底解决了账号绑定问题,适合对登录方式要求单一的游戏。
关键注意事项
- 所有IAP状态校验必须在服务器端完成,禁止仅依赖客户端本地存储的收据,防止篡改。
- 非消耗品的购买记录要做幂等处理,避免重复写入同一购买信息。
- 订阅状态需定时同步,防止用户订阅到期后仍能访问付费服务。
内容的提问来源于stack exchange,提问作者Daniel Ken Martinez
相关产品推荐
相关产品推荐

