6

アイデアは、雨でも晴れでも、濡れていても晴れていても、ユーザーはすべての費用を支払う必要があるということです。

アップル より:

ストア キットは、非消耗品、自動更新サブスクリプション、および無料サブスクリプションのトランザクションを復元する組み込み機能を提供します

これらの取引のために、Apple Store Kit には優れた組み込みツールがあります。他のタイプ (特に消耗品) に注目したいと思います。唯一のトランザクション情報は、購入が成功した後に Store Kit が受け取る識別子とレシート データです。私たちのアプリケーションは、サーバー側モデルを使用して製品を配信します。しかし、ユーザーが App Store 経由で購入を行っているときにサーバーがダウンし、レシートをサーバーに送信して検証プロセスを完了することができないなど、購入データが失われるケースは依然として多くあります。

現在の回避策は次のとおりです。

  1. サーバーは製品 ID のリストを返します
  2. ユーザーはいずれかを選択します。アプリはその識別子をデバイスに保存します (SQLite または Core Data 経由)。標準的な Apple Store の取引プロセスは、その後すぐに行われます。
  3. 成功した場合、アプリケーションは受信データをその識別子とともにデバイスに保存し、サーバーに送信します。失敗またはキャンセルがあった場合、識別子はすぐにデバイスから削除されます。
  4. サーバーの応答が OK の場合、アプリはレシート データを含む識別子をデバイスから削除します。それ以外の場合は、正常な応答が動作するまで定期的にサーバーに要求を送信します。

しかし、このアプローチにはまだリークがあります。たとえば、ユーザーは、トランザクションがサーバーに配信されるのを待たずにデバイスからアプリケーションを削除できます。そのため、ユーザーの購入に関する証拠はまったくありません。

あなたの提案は?

4

1 に答える 1

3

基本的なルールは、コンテンツを正常に配信するまで、支払いキューで finishTransaction: を呼び出さないことです。つまり、検証サーバーとコンテンツ サーバーにリクエストを送信すると、有効な応答が返されます。それらの適切な応答の後でのみ、finishTransaction: を呼び出します。悪い購入領収書は有効であることに注意してください。商品をぼったくりしようとする人が出てきます。それで寝不足になるのではなく、適切な領収書の確認を行ってください。

私が理解しているように (非消耗品から)、finishTransaction を呼び出さない限り、ストアはアプリのインストール時に再試行を続けます。そのため、領収書をデバイスに保存するためのアプリケーションは必要ないと思います。ただし、消耗品の場合、後で復元できるようにする場合は、サーバーにデータを保存する必要があります。重要な問題は、それをどのキーの下に格納するかです。

ところで、あなたの最初の行は完全に正しく、寝坊する価値があります。

于 2012-12-18T22:17:33.077 に答える