2016-04-16 14 views
6

私は、両方のデバイスユーザーを受け入れると、2つのデバイス間でクロックタイマーセッションを維持する必要があるiOSアプリケーションに取り組んでいますか?2つの異なるデバイス間でクロックセッションを維持するにはどうすればよいですか?

しかし、両方のデバイスのタイミングに欠陥がないと、これがどのように達成できるのかよく分かりません。

私はすでに、次のアイデアを見ている:両方のデバイス上のタイマーが同時にスタートしますので、

1)は、ウェブサービスまたはプッシュ通知の助けを借りて、両方のデバイスの状態を維持します。しかし、ネットワークが適切に動作していない場合、この方法は失敗に終わり、両方のデバイスにタイマーに欠陥があります。

さらに、デバイスの日付と時刻を変更しても、アプリケーションのクロックが変更されないようにする方法を知りたいと思っています。

これ以上の援助をいただければ幸いです。

ありがとうございます。

編集:Bzzアプローチを実装した後

、それは結構ですが、私はまだ問題に直面しています一つのことは、他のデバイスBに結果のネットワーク・タイムスタンプを送信するために、デバイスAからWebサービスを呼び出すにかかる時間を計算し、維持する方法です

このケースを処理するには何ができますか?

答えて

2

いくつかの考え:

  • は、システムクロックから独立して、あなた自身の時間を追跡します。何かを表示する必要がある場合は、システムクロックを使用して時刻をユーザーの壁時計時刻に変換してください。

  • 1つのデバイスの時間単位(秒単位など)は、他のデバイスの秒数と同じにする必要があります。両方のデバイスでその持続時間が等しいことを信頼してください)

  • ネットワーク遅延は基本的な問題です。 2つのデバイス間には常にオフセットが存在する可能性があると考えてください。たぶん、あなたは遅れを明らかにする方法を考え出すことができるか、絶対的な時間がここ

関連しない方法を考え出すことができアイデアです:デバイス1は、同期パケットを送信し、5秒ごと2番目の6で何が起きたとしても、device2はこのパケットを持っていなければなりません.5秒後にまだdevice2にパケットがなければ、パケットは到着するのを待ってから次の処理を続行します。パケットが3秒で到着すると、device2はそれを保持して5秒後に処理する必要があります。これは双方向で行い、両方のアプリケーションは5秒の時間枠内で同期します。要件とネットワークに応じて、「待機中」と同期パケットの送信頻度を決定する必要があります。

+0

あなたは正しいですが、私は同じ考えを持っていますが、私の疑問は、私がこのアプローチを実現する方法です。 –

5

ios-ntpを使用すると、ネットワーク時間を取得し、両方のデバイスでローカル時間とネットワーク時間の時間オフセットを計算できます。 1つのデバイスでタイマーを開始すると、ローカルタイムスタンプからオフセットを差し引き、結果のネットワークタイムスタンプを別のデバイスに送信します。別のデバイスでは、ネットワークタイムスタンプにローカルオフセットを追加し、ローカルタイムでタイマー開始のタイムスタンプを取得します。

UIApplicationDelegate.applicationSignificantTimeChange(_ application: UIApplication)を使用して、デバイスの時間の変化を監視し、ネットワーク時間を更新してオフセットを再計算することができます。

+0

ローカル時間がユーザーによって変更できないようにするにはどうすればよいですか?私の場合、ユーザーがデバイスの時刻を変更すると、アプリケーションの時計も影響を受けますか?それに対しても回避策はありますか?サーバー側からGMTを取得してアプリケーション用の別のクロックを維持し、毎秒タイマーを維持する必要がありますか? –

1

グローバル時計にフラグを送信するだけのWebサービスで実現できます。この方法では開始時刻と終了時刻のフラグを設定するだけです。この方法を使用すると、2つ以上のデバイス間の時刻を簡単に同期できます。

関連する問題