3

これに対する答えをあちこち探しましたが、答えが見つかりません。

IAP を使用したアプリがあります。ユーザーが iTunes にログインしていない場合は、ログイン プロンプトが表示されます。

ログイン プロンプトからキャンセルすると、コールバックが返されfailedTransaction:transactionますが、エラー コードは0( enum asSKErrorUnknown ) です。

では、cancel と別の を区別するにはどうすればよいでしょSKErrorUnknownうか。そのうちの 1 つは機内モードになっています。(機内モードの場合、エラー コードも 0です)。

この場合、アラートを提供したいのですが、キャンセルをクリックした場合は提供しません。

繰り返しますが、誰かが私の質問を誤解する前に、これに対する答えは SKErrorPaymentCancelled = 2 をテストすることではありません。

ユーザーがログイン後に購入をキャンセルすると、このコードが表示されます。

しかし、ログインのキャンセルについて質問しています。

編集 - マディ、本当に?ここに私のコードがあります:

/**************************************************************************
 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