iOS应用内购买恢复时检测年/月自动续期订阅类型的实现方法问询
自动续期订阅恢复时的类型识别实现方案
- 从恢复交易回调的商品ID直接匹配:调用
restoreCompletedTransactions()触发恢复流程后,会在SKPaymentTransactionObserver的paymentQueue:updatedTransactions:回调中收到所有已完成的历史交易记录,自动续期订阅交易的payment.productIdentifier与你在App Store Connect中配置的月度、年度订阅的商品ID一一对应,直接做字符串匹配即可快速区分订阅类型。 - 通过凭证解析确认订阅信息(推荐):本地交易信息如果存在异常,可读取
[NSBundle mainBundle].appStoreReceiptURL的凭证数据,解码后解析in_app数组中的对应条目,product_id字段同样可以匹配订阅类型,同时还可一并校验订阅的过期时间、是否处于有效期等状态,避免给错用户权限。 - 多历史交易的优先级处理:若用户存在多笔订阅历史(如曾经月度订阅后续升级为年度订阅),只需取所有未过期交易中
transactionDate最新的一笔,以其对应的订阅类型为准即可。
附上Objective-C示例代码片段:
- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray<SKPaymentTransaction *> *)transactions { for (SKPaymentTransaction *tran in transactions) { if (tran.transactionState == SKPaymentTransactionStateRestored) { NSString *productId = tran.payment.productIdentifier; if ([productId isEqualToString:@"com.xxx.annual_sub"]) { // 匹配到年度订阅,更新用户权限 } else if ([productId isEqualToString:@"com.xxx.monthly_sub"]) { // 匹配到月度订阅,更新用户权限 } [[SKPaymentQueue defaultQueue] finishTransaction:tran]; } } }
如果是Swift项目逻辑一致,只需替换为对应Swift语法的StoreKit接口即可。
内容的提问来源于stack exchange,提问作者James Leitch
相关产品推荐
相关产品推荐

