IAP有关的那些坑

本文为原创内容,转载请注明链接。谢谢。

获取商品信息时的错误处理

  • 获取商品信息时,提示无法连接到iTunes Store。这个问题是说无法连接到苹果的服务器。目前除了重试,没有别的办法
  • 获取商品信息时,返回的response里invalidProductIdentifiers不为空且拿不到products。迄今为止碰到这个错误有两个原因,一是运行在了越狱设备上,二是新增版本的的IAP信息尚未同步到苹果的服务器上。根据以往经验来看, 估计苹果在沙盒环境中只会保留已经上线的或者在等待上传的版本的IAP信息

购买时时的错误处理

  • 苹果扣费成功,但是白金VIP未能开通成功。
    这种情况的原因有很多种. 凭据被中间人拦截或者伪造,导致app无法将正确的凭据上传到app server, 从而server不能正确的与苹果验证,所以开通失败。之前也遇到过一些用户类似的反馈,也的确是这种原因。但这次用户的操作路径是发起购买后kill掉app, 然后完成购买,苹果提示扣费成功,重启app后app提示开通失败。通过跟踪代码发现,app的确收到了苹果交易完成的回调并拿到了正确的收据,但是将凭据上传到app server的逻辑有一些缺失。因为用户杀死了app, 一些校验信息未能保存和上传到server, 导致server认为购买失败。主要原因还是:app与苹果的交易过程是相对较慢的。用户可能在此过程中的任何一个环节kill掉app。比如在拉取商品信息时,或者在交易发起后等待苹果的通知。 app需要做好相应的容错处理

  • 用户在购买过程中,系统弹框提示“您已购买此App内购买项目。此项目将免费恢复”,然后带“好”的确认按钮。这种情况属于程序的bug, 是因为没能调用[[SKPaymentQueue defaultQueue] finishTransaction:transaction]来结束上次的finished的transaction。

其他技术细节

  • paymentQueue:updatedTransactions:方法冲, tansaction的状态为purchasing时, 此时是没有交易id的。

啰嗦两句

无论开发者在沙盒环境下测试多充分,到了线上,用户的购买路径仍然会复杂很多(比如银联支付的话,输入验证码)等等。IAP第一版上线后,线上用户还是反馈了许多在沙盒环境里无法模拟的问题。

posted @ 2015-05-11 15:21  敏迪  阅读(782)  评论(0编辑  收藏  举报