当IAP的功能实现了基本流程,还需要大部分的时间来处理异常操作。
连续多次点击购买
处理一:可以判断当前PaymentQueue中是否已经有了购买请求(是只当前未处理完成的)
__block BOOL bFind = NO;
[[[SKPaymentQueue defaultQueue] transactions] enumerateObjectsWithOptions:NSEnumerationReverse usingBlock:^(SKPaymentTransaction* obj, NSUInteger idx, BOOL *stop) {
if ([obj.payment.productIdentifier isEqualToString:pID]) {
*stop = YES;
bFind = YES;
}
}];
if (bFind == NO){
NSLog(@"new Buying");
SKPayment * payment = [SKPayment paymentWithProduct:product];
[[SKPaymentQueue defaultQueue] addPayment:payment];
}
处理二:UI也可以加入防止多次点击的处理,比如,转圈等待处理中。。。
网络异常
App启动后就没有联网
中间也要支持中间过程重新连接。
未完成购买流程
这种情况不太好模拟,目前找到了一个比较好模拟测试过程:
1. 可以在弹出购买框后,关闭当前Debug进程
2. 取消或者完成购买框。
3. 重新启动Debug进程,来调试,恢复购买的流程。这时可能收到以下几个消息:
SKPaymentTransactionStateFailed
SKPaymentTransactionStatePurchased
SKPaymentTransactionStatePurchasing(框一直不点击)