内购在虚拟商品销售中是不可或缺的购买方式。据苹果公布的每年审核中被最多的几个情况之一就是内购买出的问题。那么在这里通过我的内购买开发经验总结几点。首先审核流程和创建订单这个网络上的资料有的是,我就不做截图了,给一个链接 http://www.allluckly.cn/
1、在测试和提审中有一个比较小的问题,这个给初次接触内购的童鞋们说说。内购的测试方法是在iTunes connect 中创建一个沙箱测试账号。需要一个有效的邮箱,并且去验证。然后在手机设置中退出你的Apple ID,就可以在你的APP中进行测试了。注意苹果提醒:不能使用沙箱测试账号在进行线上的APP的充值,这里的线上,大家不要迷糊是服务器的“正式服”而是指App Store下载来的应用。(他怎么可能知道你是正式服还是测试服,如果相信你们是不会出现这样低级的认知错误的。)
2、既然在1中提到的测试账号,那么就必然有正式的Apple ID进行充值,这其中的区别改怎么去找寻?其实,只要在未上线之前,内购都只能支持沙箱测试账号进行充值(苹果就是这么任性),你需要进行的就是正常完成沙箱测试账号的通过就行了。但是并没有那么容易,因为有一个验证地址(sandbox---https://sandbox.itunes.apple.com/verifyReceipt or app store:https://buy.itunes.apple.com/verifyReceipt)的区别,未在App Store销售的APP是需要去sandbox地址验证票据(苹果颁发的商品清单)。这个中间有一个需要处理的地方,因为测试服我们一般需要沙箱验证,正式服需要去App Store验证。但是审核过程中,苹果审核人员是使用的沙箱测试账号,而我们提审的版本必然使用正式服,那么怎么让这帮审核的人能够通过,得到他想要的虚拟物品呢?我们的做法是给他一个APP的测试账号,如果是这个账号,使用沙箱测试账号进行充值,后台因为是正式服会去App Store进行验证,这里需要补充说明一点:沙箱账号去App Store验证时会返回21007。那么后台就判断当是这个账号(APP的账号),返回21007时我们就主动给他虚拟物品。难么就解决了。
3、丢单和重复订单问题。之前出现一种情况,用户只充值了一笔,但是我们给他加了几次虚拟物品,因为我们后台验证的时候查看验证结果中所有的商品信息,这些可能是所有支付成功订单,我们后来发现,只要验证通过了这个订单其实就可以进行加物品操作,而不需要别的验证其中的所有商品。同时我们在生成一个订单的之前,需要后台创建一个订单ID,并且这个订单被处理过后就不再处理这个订单ID的任何订单。丢单的情况主要是异常情况了,比如支付成功过后网络请求超时,崩溃等问题,我们的做法是。现将这个成功的订单(苹果回调中成功)存于本地,如果商品给用户添加成功就将本地删除,否则下次程序启动或者你想要的什么时候通过读本地订单信息完成加物品操作。
不好意思,随便写写,主要给自己看看,将来回过头来才知道有多菜。