4

これが私の問題です:

アプリ内購入にstorekitを使用する場合、プロセスの進行中に数秒間待つようにユーザーに指示する「読み込み中」ビューを表示しています。しかし、この同じユーザーが、ストアキットが彼のitunesアカウントのパスワードを要求したときに、「キャンセル」ボタンを押したとしましょう...読み込みビューを非表示にするためにこのイベントを「キャッチ」するにはどうすればよいですか?

ユーザーのコミュニケーションは非常に重要なので、Appleの拒否の原因になる可能性があるのではないかと思います。

ヒントをありがとう!

編集:私はここで取引をしていません。私の最初のステップは、完了したトランザクションを復元して、パスワードプロンプトが次の方法でトリガーされるようにすることです。

[[SKPaymentQueue defaultQueue] restoreCompletedTransactions]
4

2 に答える 2

13

Apple 開発者フォーラムで同様のことが報告されました。

ユーザーが復元を求めた後にキャンセルを押すとどうなりますか......

彼らの場合、ドキュメントからメソッドをコピーして貼り付けたところ、明らかにエラーなしでコンパイルされたバグが作成されました。

// wrong, but compiles
- (void)paymentQueue:(SKPaymentQueue *)queuerestoreCompletedTransactionsFailedWithError:(NSError *)error

それ以外の

// correct
- (void)paymentQueue:(SKPaymentQueue *)queue restoreCompletedTransactionsFailedWithError:(NSError *)error

オブザーバー メソッドが上記の最初のメソッドのように見える場合は、復元操作の失敗メッセージを受け取っていない可能性があります。

アップデート:

の SDK ドキュメントにはSKPaymentTransactionObserver、OS 3.1 (2009-11-17) の復元失敗メソッドが記載されていますが、3.0 ドキュメント (2009-05-01) には記載されていないようです。3.1 のドキュメントには、このオブザーバー メソッドは「iPhone OS 3.0 以降で使用可能」と記載されているため、奇妙です。

念のため。iPhoneOS3.0.sdk/System/Library/Frameworks/StoreKit.framework/Headers/SKPaymentQueue.h のコピーをチェックして、復元失敗オブザーバー メソッドがあることを確認しました。(そうです。)

于 2009-11-24T17:23:48.353 に答える
0

ユーザーがキャンセル ボタンをクリックすると、リクエストは失敗します。そのようなストア オブザーバーを使用します...

MyStoreObserver *observer = [[MyStoreObserver alloc] init];
[[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;
        }
    }
}
于 2009-11-23T10:26:03.243 に答える