关于内购之前的准备工作这里就不准备涉及了,审核问题会在介绍完内购之后稍微说一下。
1.获取商品列表
根据productID发送请求在以下代理方法中
- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response
根据response.products获取到SKProduct。
2.后台生成订单
根据获取到的可用商品列表向后台进行请求获取到指定的订单号,方便后续关联凭证进行校验。后台可只校验产品ID。
3.购买商品
将订单号配置成SKMutablePayment的applicationUsername属性,并在交易队列中开启购买。在以下代理方法中根据交易状态进行相应的处理:
- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray*)transactions
{
for (SKPaymentTransaction *transaction in transactions) {
switch (transaction.transactionState) {
case SKPaymentTransactionStatePurchasing:
break;
case SKPaymentTransactionStateDeferred:
break;
case SKPaymentTransactionStateFailed:
[self fail:transaction];
[self completeTransaction:transaction];
break;
case SKPaymentTransactionStatePurchased:
[self success:transaction];//成功之后将相应的transaction.payment.applicationUsername跟凭证绑定进行缓存
[self completeTransaction:transaction];
break;
case SKPaymentTransactionStateRestored:
[self callPayBlock:nil];
[self restoreTransaction:transaction];
break;
}
}
4.校验凭证,更新商品形态
跟后台校验凭证,若凭证校验成功则删除本地缓存。
丢单处理:
在程序启动的时候开启监听获取交易队列的交易状态,以及校验本地凭证缓存。
审核:
第一次提交审核将app内购买商品添加到发布的版本中。如果审核失败了则版本被拒绝,商品也是打上红色的标志。
下次提交的时候只需要修改上次的问题,然后将商品描述随意修改下即可。这个时候提交审核的时候发现并没有添加app内购买商品。
app官方说到只有第一次审核的时候需要添加在版本上添加内购商品,故而我觉得第一次审核失败之后后续的提交版本应该不算是第一次审核,商品其实已经包含在该版本中了,不信的同学可以在商品内添加其他一项商品进行试验,这个时候发现审核的版本又出现了app内添加商品的信息,而且能添加的商品只有刚刚添加的那一项。所以我猜测这个时候之前的商品已经在该版本中,无需再添加。
后续上线之后,记得服务端校验凭证的地址从沙盒测试改成正式环境的。
沙盒测试的时候需要保证bundle Identifier 跟个人发布证书上的一致。
浅谈iOS内购
网友评论