You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity移动端可消耗内购物品跨设备/重装恢复方案咨询

无需登录恢复可消耗内购的实现方案与注意事项

常用实现方案

1. 自定义UUID+Firestore(规避默认匿名用户丢失问题)

Firestore默认匿名用户重装后会失效,但可以通过自定义持久化用户标识解决:

  • 首次启动应用时生成唯一UUID(比如System.Guid.NewGuid().ToString()),将其存储在设备的安全存储中(iOS用Keychain,Android用EncryptedSharedPreferences,禁止用PlayerPrefs,易被篡改)。
  • 以这个UUID作为Firestore的文档ID,创建用户专属文档,存储可消耗内购核心数据:购买总量、消耗总量、剩余余额(建议同时存储总量和消耗记录,避免单一数据被篡改)。
  • 重装应用后,读取安全存储中的UUID,直接拉取对应Firestore文档的数据恢复余额。
  • 跨设备恢复时,结合平台内购恢复API(Apple的SKPaymentQueue.restoreCompletedTransactions()、Google的BillingClient.queryPurchasesAsync()),获取用户所有已购买记录,同步到Firestore文档中重新计算剩余余额。

2. Unity Economy+安全存储保存匿名凭证

Unity Economy集成了用户系统和内购管理,可通过以下方式实现无登录恢复:

  • 使用Unity Authentication的匿名登录功能(AuthenticationService.Instance.SignInAnonymouslyAsync()),登录成功后将匿名用户的凭证(如refresh token)存储在设备安全存储中。
  • 将可消耗内购的余额数据托管在Unity Economy中,购买完成后通过官方API更新余额(必须先完成平台内购验证,防止作弊)。
  • 重装应用时,读取安全存储中的凭证,调用AuthenticationService.Instance.SignInWithTokenAsync()恢复原匿名用户身份,直接获取Unity Economy中的余额数据。
  • 跨设备恢复同样依赖平台内购恢复API,将恢复的购买记录同步到Unity Economy中更新余额。

实施前必须注意的问题

  • 隐私合规:
    • 禁止随意使用SystemInfo.deviceUniqueIdentifier这类设备标识,iOS的IDFA需用户授权,建议用自定义UUID替代。
    • 存储的用户凭证、UUID必须加密,且需在隐私政策中明确告知用户数据存储用途,符合GDPR、CCPA及应用商店的隐私要求。
  • 数据防篡改:
    • 所有余额更新操作必须经过服务器端校验(Firestore可通过安全规则限制写入权限,Unity Economy依赖官方服务器校验),客户端仅能发起请求,不能直接修改数据。
    • 内购完成后必须调用Apple/Google的官方验证接口校验receipt,确认购买合法后再更新云端余额,杜绝客户端作弊。
  • 跨设备恢复的局限性:
    • 无登录情况下,跨设备无法自动关联用户,必须提供手动“恢复购买”入口,让用户触发平台内购恢复流程,通过购买记录匹配用户数据。
    • 需确保云端记录了每一笔购买的明细(如订单号、购买数量),恢复时可重新计算剩余余额。
  • 数据生命周期:
    • 确认Firestore文档、Unity Economy匿名用户的保留期限,避免用户长期不活跃导致数据被自动清理,可在后台设置延长保留时间。
  • 测试覆盖:
    • 必须测试重装应用、清除应用数据、更换设备、跨平台(iOS/Android)恢复等场景,确保数据稳定恢复;同时测试恶意篡改客户端数据的情况,验证服务器端校验的有效性。

内容的提问来源于stack exchange,提问作者user3623413

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 21:15:44