サンドボックス環境でアプリ内購入をテスト中です。「restoreCompletedTransactions」のプロセスを開始すると、テストユーザーのパスワードを入力するように求めるダイアログが表示されます。その段階でキャンセルを押すだけでは、プロセスがキャンセルされたというフィードバックは得られません。
助言がありますか
レザ
サンドボックス環境でアプリ内購入をテスト中です。「restoreCompletedTransactions」のプロセスを開始すると、テストユーザーのパスワードを入力するように求めるダイアログが表示されます。その段階でキャンセルを押すだけでは、プロセスがキャンセルされたというフィードバックは得られません。
助言がありますか
レザ
購入方法の復元をキャンセルした場合paymentQueue:restoreCompletedTransactionsFailedWithError:
は、支払いトランザクションオブザーバーで呼び出される必要があります。
ユーザーがキャンセルボタンをクリックすると、リクエストは失敗します-そのようなストアオブザーバーを使用してください...
[[SKPaymentQueue defaultQueue] addTransactionObserver:observer];
そして、このように処理します。
- (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;
}
}
}
ユーザーがキャンセルボタンを押すと、このメソッドが呼び出されるので、適切なメッセージを配置します。
- (void)failedTransaction:(SKPaymentTransaction *)transaction {
[[SKPaymentQueue defaultQueue] finishTransaction: transaction];
}
if (transaction.error.code != SKErrorPaymentCancelled)
{
NSLog(@"Transaction error: %@", transaction.error.localizedDescription);
}
- (void)paymentQueue:(SKPaymentQueue *)queuerestoreCompletedTransactionsFailedWithError:(NSError *)error {
NSLog(@"%s","User Cancel.");
}