如何在发起内购前阻止不同应用用户使用同一Apple ID修改自动续费订阅?
解决方案
1. 购买前预获取当前Apple ID的订阅标识
在用户点击购买、发起正式支付请求前,先通过StoreKit获取当前设备Apple ID下有效自动续费订阅的原始交易ID(original transaction ID):
- iOS 15+:调用
SKSubscriptionStoreManager的fetchSubscriptionInfos(completion:)接口,直接提取订阅信息中的originalTransactionId。 - iOS 14及更早:可调用
SKPaymentQueue.default().restoreCompletedTransactions(),在交易更新回调里从恢复的交易中提取originalTransactionId;也可以用SKReceiptRefreshRequest拉取本地收据,解析出original_transaction_id,避免触发Apple ID密码弹窗。
2. 后端做绑定关系校验
将获取到的originalTransactionId传给后端服务器,后端执行以下校验逻辑:
- 查询数据库中该
originalTransactionId绑定的应用用户账号。 - 如果绑定的账号不是当前登录的用户B,直接返回校验失败结果。
3. 前端拦截购买并提示
收到后端校验失败的结果后,前端直接弹出提示:“当前Apple ID已绑定其他账号,请更换Apple ID后再尝试购买”,终止购买流程,不发起正式支付请求。
若校验通过,再正常执行购买流程。
优化细节
- 用户登录应用后立即执行一次校验,进入购买页面时直接给出提示,无需等用户点击购买按钮。
- 监听设备Apple ID切换事件,切换完成后重新拉取订阅信息并校验,覆盖更多场景。
内容的提问来源于stack exchange,提问作者nirav
相关产品推荐
相关产品推荐

