3

一直在寻找这个问题的答案,找不到答案。

我有一个带有 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];
}

看到我做错了什么吗?

4

0 回答 0