一直在寻找这个问题的答案,找不到答案。
我有一个带有 IAP 的应用程序。如果用户没有登录 iTunes,他们会收到登录提示。
如果他们从登录提示中取消,我会收到一个回调,failedTransaction:transaction
但错误代码是0
(即 enum asSKErrorUnknown
)。
那么如何区分 cancel 和 another SKErrorUnknown
,其中一个处于飞行模式?(如果它们处于飞行模式,则错误代码也是 0)。
在这种情况下,我想提供警报,但如果他们点击取消,则不会。
再次 - 在有人误读我的问题之前 - 答案不是测试 SKErrorPaymentCancelled = 2。
当用户在登录后取消购买时,您会得到此代码。
但我问的是取消登录。
编辑 - maddy,真的吗?这是我的代码:
/**************************************************************************
paymentQueue
**************************************************************************/
- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions
{
for (SKPaymentTransaction * transaction in transactions) {
switch (transaction.transactionState)
{
case SKPaymentTransactionStatePurchased:
[self completeTransaction:transaction];
break;
case SKPaymentTransactionStateFailed:
[self failedTransaction:transaction];
break;
case SKPaymentTransactionStateRestored:
[self restoreTransaction:transaction];
default:
break;
}
};
}
/**************************************************************************
failedTransaction
*************************************************************************/
- (void)failedTransaction:(SKPaymentTransaction *)transaction {
NSLog(@"error code = %ld", transaction.error.code);
// If IAP fails, display an alertView.
NSString *title = @"Purchase Failed";
NSString *messageString = @"In-app Purchased failed. Could not contact iTunes store or iTunes login not valid";
if (transaction.error.code != SKErrorPaymentCancelled) {
UIAlertView *iapFailedAlertView = [[UIAlertView alloc] initWithTitle:title message:messageString delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil, nil];
[iapFailedAlertView show];
iapFailedAlertView = nil;
}
[[SKPaymentQueue defaultQueue] finishTransaction: transaction];
}
看到我做错了什么吗?