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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 09:36:03