1

アプリ ストアの領収書の処理に関する WWDC 2013 の講演では、iOS アプリの場合、領収書の検証コードをできるだけ早く呼び出す必要があることが提案されています。前でもapplication:didFinishLaunchingWithOptions:- つまりmain()関数内で。これが機能する方法は次のようになると思います。

int main(int argc, char *argv[]) {

    @autoreleasepool {
        validateReceiptMethod(); // <---- HERE
        int retVal = UIApplicationMain(argc, argv, nil, nil);
        return retVal;
    }
}

UIApplicationMain()メソッドはアプリを起動して を呼び出すという考え方ですapplication:didFinishLaunchingWithOptions:validateReceiptMethod()afterを付けると、UIApplciationMain()実行されません。

とにかく、これはうまく機能しています。しかし、領収書がない場合はどうなりますか?SKReceiptRefreshRequest次に、アプリ ストアから新しいアプリを取得するために電話する必要がありますが、これで問題ありません。ただし、このコードを の前UIApplciationMain()に実行すると、UI が表示される前にも実行されます。では、ユーザーに Apple ID のログイン ダイアログを表示するとどうなるでしょうか。メソッドSKReceiptRefreshRequestから呼び出すことさえ可能ですか?main()

4

1 に答える 1

2

では、ユーザーに Apple ID のログイン ダイアログを表示するとどうなるでしょうか。

ストア キット アラートは、アプリケーションが所有していないウィンドウに表示されるため、アプリケーションがアクティブでないとき (起動前であっても) に表示される可能性があります。しかし、これは実際には関係ありません。

メソッドSKReceiptRefreshRequestから呼び出すことさえ可能ですか?main()

これは、独自のイベント ループを設定し、受信要求が終了したときにそれを停止する場合に可能ですが、これを行うべきではありません。ネットワーク要求を待っているアプリケーションの起動を遅らせないでください。完了しない可能性があります。領収書が無効な場合は、UIApplicationMain()起動が終了したときに別の領収書を入力して要求することをお勧めします。

編集:に入る前に有効な領収書を持っていないことについては何もできUIApplicationMain()ないため、Apple がこの時点で確認することを推奨する理由がわかりません。これは、OS X ではアプリケーションを終了する必要があるため意味がありますが、アプリケーションを実行し続ける必要があり、無効なレシートを無視しても問題ない iOS では意味がありません。早い段階でチェックし、状態をグローバル変数に保存してから、後で応答することができます。しかし、返信する準備ができている場合にのみ確認してください。

于 2013-12-05T18:57:46.603 に答える