关于iOS内购IAP的一个可能导致丢单的问题

        首先:我只是个iOS开发的菜鸟,语文不及格的学渣。写的东西都只是一点自己的浅显的理解。如有不对,欢迎大神们指点,小弟虚心学习~我只是个梦想成为大神的菜鸟。

        闲话少说。这篇文章是关于苹果IAP的一个可能导致项目丢单的bug.(可能是bug,也可能是我没有透彻的领悟苹果的用意,抛出来供大家参考)

        问题的根本出现在内购SKMutablePayment 类的 applicationUsername对象在部分情况下会被苹果丢掉,成为null。

        applicationUsername  是苹果在iOS7.0及以后为内购增加的一个自定义字段,开发者可以在该字段中记录一些自定义的数据。但是在使用过程中发现,部分(注意强调下,是部分)用户第一次使用苹果内购时,手机会提示用户去绑定银行卡。这时用户点确定过去绑定银行卡后继续点确定支付,苹果内购回调:

- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions;

方法接收到的付款成功的 SKPaymentTransaction交易中的SKMutablePayment对象的applicationUsername会被苹果置为null.再次强调,这个问题只会部分用户发生。目前还没有找到规律,也没办法复现。

        基于以上问题。如果大家的项目将例如内部订单号等信息存入applicationUsername中,就有可能导致存入的信息丢失的问题。不同的设计可能会引发不同的bug。由于我的项目将内部订单号存入applicationUsername,丢失后,无法提交服务器校验小票。所以就丢单了。

        另外在分享个需要注意的:就是前面提到当用户点击确认绑定手机卡跳走后,苹果会首先返回一个支付取消的通知。如果用户很乖的绑卡并且确认支付,苹果又会返回一个支付成功的通知。所以这里也需要大家注意,不要因此引发什么问题。

        可能这个问题对大家来说并不会导致丢单或其他问题。只是在这里给大家分享下这样的一个坑,万一有人跟我一样的做法呢~防止大家入坑,希望能帮到大家~ Ps.马上过年了,祝大家新年愉快。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 174,941评论 25 709
  • 当悲伤经由大脑过滤后,似乎都变了味。而流下的泪感觉也不再纯粹。 强忍止住,以显示所谓的坚强。或如水银泻地般泉涌,止...
    bert5阅读 2,361评论 0 1
  • 游走在无人的小巷,我放缓脚步,贪婪地嗅着雨后清香的芳草味,好似怎也嗅不够。晶莹的雨珠点缀在娇艳的牡丹花瓣上,颤颤悠...
    波波简生活阅读 3,218评论 9 2
  • 我进入网络营销这个行业虽不久,但多多少少见识了一些事。从震撼到佩服,深感营销这个行业,真是将人心玩到了极致。 - ...
    太阳的森林阅读 1,527评论 0 1