0

オンラインでもオフラインでも動作する必要があるアプリケーションを開発しています。このアプリケーションは、サーバーと情報を同期する必要があります。このためには、デバイスがサーバー クロックを使用する必要があります。私は多くの情報を見つけました、そして私は次の考えを得ました:

  1. ユーザーがオンラインでログインすると、サーバーのクロック時間を取得するよう強制します。この時点で、彼は義務的にインターネットに接続している必要があるため、問題ありません。
  2. 時計サーバーの時刻を取得すると、デバイスの電源がオンになっている間隔を示す systemUptime 情報を取得し、保存します。次のように systemUptime を取得できます。

    [NSProcessInfo processInfo].systemUptime
    
  3. ユーザーが新しいローカル ファイルを作成するときは、systemUptime 関数に基づいて現在の間隔がわかるため、現在の時刻がわかり、iOS のシステム クロックに依存しません。

問題は、そのデバイスが再起動されるか電源がオフになるたびに、systemUptime がリセットされることです。ここまではOKです。ユーザーに再度ログインを強制し、サーバーのクロック時間を再度取得することで解決できます。私の問題は、デバイスがいつ再起動されたかを知ることです。手伝って頂けますか?君たちありがとう!

4

2 に答える 2

1

私のアドバイスは、デバイスの時間をまったく参照しないことです。サーバーからファイルを取得し、ファイルが取得されたサーバー時間もサーバーに応答させます。これは、ファイル、ファイル名、またはデバイスに個別に保存できます。

将来のある時点で、以前に記録したサーバー時間よりも新しいファイルがあるかどうかをサーバーに尋ねます。

この意味で、時間は実際にはまったく時間ではなく、バージョン番号であり、バージョンの進行中のシーケンスを示すサーバーからの整数のみを使用して、サーバーでも明示的にすることができます。

アプリがこのように強力であることが重要である場合、唯一の選択肢は、デバイスの時間に依存しないことです。そうしないと、壊れる可能性が多すぎます (時間チェックの遅延による小さな時間エラー、デバイスの工場出荷時設定へのリセット、ユーザーによる悪意のある操作など)。可能であれば、デバイス時間から独立したままにしておくことをお勧めします。

于 2013-09-09T20:19:42.090 に答える
0

初めて systemUptime を取得するときは、現在の (iOS) の日付と時刻からそれを差し引きます。それは、システムが最後に起動された時間です。

その後、必要に応じてこの値を再計算してください。「システムが最後に起動された時刻」が変更された場合は、再度ログインする必要があることがわかります。

ただし、別のコメンターが示唆しているように、これに最初から取り組むより良い方法があると思います。

于 2013-09-09T19:53:36.197 に答える