iOS内购:设置applicationUserName后获取始终为null,求排查原因
iOS内购:
applicationUserName在回调中始终为null的排查方案 我之前在沙箱环境测试内购时也碰到过一模一样的问题,结合你的代码和环境,给你几个实用的排查方向:
确认交易类型是否为新购买
恢复购买(SKPaymentTransactionStateRestored)的交易中,系统会重新生成SKPayment对象,不会保留你原来设置的applicationUserName。只有**新购买的交易(SKPaymentTransactionStatePurchased)**才会携带这个值。你可以在处理逻辑里先判断交易状态,避免误处理恢复交易的情况。排查沙箱环境缓存干扰
苹果沙箱的交易记录有时候会有缓存残留,导致回调拿到的是旧的交易数据。建议你先退出当前沙箱账号,重启设备,再重新登录沙箱账号进行测试,这一步解决了我当时的问题。验证
applicationUserName是否真的被设置成功
在添加支付队列前,先打印日志确认值已经正确设置,排除代码中其他地方意外重置的可能:SKMutablePayment *payment = [SKMutablePayment paymentWithProduct:product]; payment.applicationUserName = @"data"; NSLog(@"添加支付前的appUserName: %@", payment.applicationUserName); // 确认这里输出"data" [[SKPaymentQueue defaultQueue] addPayment:payment];考虑版本兼容性问题
Xcode 12.1 和 iOS 14.1 确实存在一些内购相关的小bug,你可以尝试升级到稍新的版本(比如Xcode 12.5、iOS 14.5),看看是否是系统层面的问题导致值丢失。
另外,在处理交易回调时,也可以多打印一些交易相关的信息,比如transaction.transactionIdentifier,确认每次测试都是新的交易,而不是重复处理旧的缓存交易。
内容的提问来源于stack exchange,提问作者Dum William
相关产品推荐
相关产品推荐

