3

iOS アプリに消耗品の InApp Purchase を実装しました。ユーザーはコンテンツを見るために料金を支払う必要があり、24 時間で有効期限が切れます。

ユーザーが支払いを行うと、サーバーにcurrent date&expiration dateを送信します。purchase dateこれで、特定のログイン ユーザーのコンテンツ リストをフェッチすると、サーバーが返されます。たとえば、ユーザーPatrickがアプリにログインすると、コンテンツのリストを表示できます。その Web サービスでは、そのユーザーの有効期限も取得し、その時間に基づいて有効期限を表示します。有効期限が過ぎている場合は、すべてのコンテンツ リストのセルに BUY ボタンが表示されます。

私のアプリの大きな懸念は、ユーザーが現在の日付をデバイスから変更することです。ユーザーが現在の日付を定期的に変更し、自分のデバイスが に到達する機会を与えない場合、ユーザーはexpiration date永遠にコンテンツにアクセスできます。

この状況を克服するための最善の解決策は何ですか? これが私が立ち往生しているポイントです。

4

2 に答える 2

4

ユーザーがオンラインであることを要求できる場合は、デバイスの時間を無視して、サーバーですべての検証を行います。

コンテンツへのオフライン アクセスをサポートしている場合、ユーザーが時計を繰り返し戻し、オンライン中にアプリをまったく使用しないという可能性を受け入れる必要があります。これは彼らのデバイスの一般的な機能を損なうように思われるので、個人的にはあまり気にしません.

したがって、いずれにせよ、取得できる場合はサーバーの時刻を延期し、そうでない場合はデバイスの時計を使用してください。

編集

オフラインのケースの詳細:

  1. アクセスできる唯一のクロックは、デバイス クロックです。
  2. ユーザーは、アプリを使用していないときでも自分の時計を制御できます。
  3. ユーザーはアプリだけを選択してオフラインにすることはできないため、オフラインを選択すると、デバイスのオンライン機能を使用できなくなります。
  4. 同様に、時計の変更もシステム全体の設定であり、リマインダーや時間を伝える能力に影響を与えます。

これらすべての理由から、ユーザーが 1 つのアプリのコンテンツを取得するためだけにデバイスの機能を低下させることはないと想定することは理にかなっています。私の意見では、気にする価値はありません。時間に基づいてコンテンツを制限することが重要な場合は、接続を要件にする必要があります。

于 2015-07-17T19:21:10.610 に答える
3

アプリが最後に起動された時刻をメモし (GMT で保存)、次のことを行います。

  • 次回ユーザーがアプリを使用するときに、時間 (GMT) が保存された時間よりも短い場合は、警告を発します (過去へのタイムトラベルは許可されていません)。
  • 別のバックワード タイム トラベルでは、オンライン接続が確立されるまでアプリをブロックし、サーバーですべてのコンテンツを確認できます
  • 前方へのタイム トラベルは許可されます (ユーザーが実際に自分が間違っていることを理解し、時間を正しい値に戻したことを意味します) が、警告カウントをリセットすることはできません

カレンダーをロケールからグレゴリオ暦の表現 (または使用/好きな他の表現) に変換することを忘れないでください。

于 2015-07-23T10:37:19.447 に答える