iOS IAP支付常见问题汇总与解决

这篇博客汇总了iOS应用内购买(IAP)过程中遇到的常见问题,包括获取商品信息失败、购买结果监听不执行、审核环境注意事项、元数据丢失、沙盒测试账号问题、支付提示错误、服务器验证问题等,并提供了相应的解决策略和官方文档链接。
摘要由CSDN通过智能技术生成

1. 获取不到商品信息的原因

  • 沙盒的测试账号和你请求商品信息没有关系
  • iTunes Connect里面对应账号的协议、税务和银行业务信息有没有填完整,填好的应该是这个样子这个很容易疏忽,务必检查

银行税务信息填写完整状态

银行税务信息未填写

  • 确认证书是否添加IAP支付功能默认创建的证书是包含该项的
  • 确定是真机测试且手机没有越狱大部分越狱手机也可以测试,深度越狱破坏系统的可能无法调起支付
  • 确定内购商品添加到了需要内购功能的App
  • 确定当前运行的AppBundle ID和后台配置的AppBundle ID是一致的
  • 可以尝试先删除旧App,再重新编译生成新的,避免新App未覆盖错误
  • 如果上线后发现线上包请求不到商品信息,一般发生于首次提交App或添加新商品,可能是苹果缓存的bug,当你的App通过审核以后,你发现在生产环境下获取不到商品,这是因为App虽然过审核了,但是内购商品还没有正式添加到苹果的服务器里,耐心等待一段时间就可以啦,或者去苹果后台刷新配置商品信息列表,然后等待一天左右时间大概就可以了

2. 如果请求到了商品信息,也发送了购买请求,但是监听购买结果的方法就是不执行

  • 可以检查一下,是否在工具类初始化的时候,添加了监听,添加监听代码如下
  • 注:支付工具类一般用单例模式,避免创建多个对象或者对象提前释放,导致苹果回调不会调用支付失败,或者使用self全局化支付工具类对象,不可使支付工具类对象局部变量化
#pragma mark - 单例方法
static IAPPayManager* instance = nil;
+ (instancetype)sharedInstance{
  static dispatch_once_t onceToken = 0;
  dispatch_once(&onceToken, ^{
      instance = [[IAPPayManager alloc] init];
  });
  return instance;
}

#pragma mark - 重载初始化方法,注册用于处理支付回调的Observer
- (instancetype)init{
    self = [super init];
    if (self) {
        [[SKPaymentQueue defaultQueue] addTransactionObserver:self];
    }
    return self;
}

3. IAP审核环境

  • 苹果在审核App时,只会在sandbox环境购买,其产生的购买凭证,也只能连接苹果的测试验证服务器,审核时后台要保证沙盒测试环境开放,以免服务器无法验证通过IAP购买,造成App审核被拒
  • TestFlight测试时也是走的sandbox环境购买

4. 只要不是红色的状态都是可以进行支付测试的,元数据丢失是因为,在增加内购项目的时候,没有填写完全,产品ID是唯一的,假如你删除了一个内购项目,那么这个产品ID就

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值