17

アプリの 1 つにアプリ内購入を追加しています。必要に応じて、ユーザーが購入したアイテムを再ダウンロードできるようにするボタンを追加しました。そのための IBAction メソッドは次のとおりです。

- (IBAction)touchedButtonUnlockAgain:(id)sender {
    [self.activityIndicator startAnimating];            
    [UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
    [[SKPaymentQueue defaultQueue] restoreCompletedTransactions];

}

このボタンをタップすると、標準のログイン ボックスが表示されます。サンドボックスのユーザー名とパスワードを入力します (正しく、確認済みです)。ログイン ボックスが消えた後、0.5 秒後に再び表示されます。そのため、同じユーザー名とパスワード (正しく、確認済み) を使用して再度ログインすると、購入したものが再ダウンロードされます。シミュレーターとデバイス (どちらの場合も iOS 6.0) で発生することを確認しました。

ユーザー名/パスワードの入力を 2 回求められるのはなぜですか?

4

2 に答える 2

5

これの唯一の理由は未完了のトランザクション、つまりfinishTransaction償還の呼び出しを待っているゴーストです。サインアウトしたユーザーが開始したトランザクションを完了できなかったために、または単に完了前にアプリが突然終了したために、それらが存在する可能性があります。基本的に、addPayment/ restoreCompletedTransactionsandへの不均衡な呼び出しfinishTransactionが原因である可能性があります。

代理人を確認してください: paymentQueue:RestoreCompletedTransactionsFinished:&paymentQueue:restoreCompletedTransactionsFailedWithError:

何かを2回していますか?エラーが表示されますか?

確認すべきもう 1 つの点は次のとおりです。アプリのライフ サイクルのどの時点で、次のステートメントを呼び出しますか?

[[SKPaymentQueue defaultQueue] addTransactionObserver]

これはできるだけ早く呼び出すことが重要です - アプリの終了によりゴーストになる失われたトランザクションが再び現れることがあるため - 完了することを期待しています。アクティブなオブザーバーがなければ、呼び出す最後のゲートウェイである updatedTransactions メソッドにヒットしませんfinishTransaction

于 2015-06-30T13:48:06.527 に答える
-1

お使いの携帯電話で、[設定]/[iTunes & App Store] に移動して、そこに指定されている既存の Apple ID からサインアウトしてみてください。アプリに戻り、もう一度試してください。

于 2013-02-11T20:08:09.930 に答える