これに対する答えをあちこち探しましたが、答えが見つかりません。
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];
}
私が間違っていることがわかりますか?