背景#
APP が部ネットワーク貨物運送情報相互プラットフォームに接続するための考えとプロセスを記録します。
実現#
iOS SDK が提供するメソッドは、以下の 6 つです。
- init
- start
- send
- pause
- restart
- stop
見た目は簡単ですが、SDK のあるメソッドが失敗する可能性を考慮する必要があります。また、同じドライバーが複数の運送単位を持っていたり、同じ運送単位が複数のドライバーによって分割輸送されたり、運送中に車両が変更されたり、ドライバーが運送中に携帯電話を変更するなどのシナリオを考えると、位置情報を継続的に記録し、完全な単位のリンクを完了することは簡単ではありません。
これらのシナリオの処理にはサーバー側の協力が必要ですが、サーバー側は部ネットワーク貨物運送情報プラットフォームと直接やり取りするインターフェースがないため、貨物運送情報プラットフォームから状態やデータを直接読み取ることができず、処理が面倒になります。
私たちの考えは、サーバー側が異常を処理することです。したがって、まずサーバー側に現在処理している単位とステップを知らせる必要があるため、記録インターフェースが必要です。SDK のメソッドを実行するたびに、成功または失敗をサーバー側に同期します。
他の携帯電話や他のユーザー、またはバックエンドが手動で単位を閉じる状況を避けるために、サーバー側は未終了の運送単位があるかどうかを確認する別のインターフェースを提供する必要があります。同様に、このインターフェースは SDK のメソッドを実行するたびに呼び出され、未終了の運送単位があるかどうかを取得します。
もう一つの状況は、ユーザーが運送単位を開始した後、APP が終了し、再度開いたときに、SDK のどのメソッドを実行すべきかということです。また、ドライバーが途中で別の携帯電話でアカウントにログインした場合、元の携帯電話で再度開いたときにどのメソッドを実行すべきか、新しい携帯電話でどのメソッドを実行すべきかを確認するインターフェースが必要です。このような場合に実行すべきステップを確認するためのインターフェースが必要です。
しかし問題が発生しました。同じドライバーが、ルートや車両の大きさの理由で同時に複数の運送単位を持っている可能性があり、各運送単位の送信間隔が必ずしも同じではありません。したがって、複数のタイマーを同時に開始し、混乱を避けつつ、運送単位が終了した後に対応するタイマーを閉じることを保証する方法は?運送単位番号と分単位番号をキーとして使用し、タイマーを個別のモデルにカプセル化して作成し、モデルを値として辞書に保存します。タイマーを作成する前に、運送単位番号と分単位番号に基づいて対応するタイマーが存在するかどうかを確認し、存在する場合は重複して作成せず、存在しない場合は作成します。SDK の Stop または Pause メソッドを実行した後も同様の方法で対応するタイマーを取得し、そのタイマーを停止します。
しかし実際には、SDK が何らかの理由で Stop に失敗し、実際にはこの運送単位がすでに終了している状況に遭遇しました。また、SDK のメソッドが成功したが、状態をサーバー側に保存する際に失敗した状況にも遭遇しました。これらの異常な状況は、同期記録表に基づいて単独で処理することはできず、ビジネス表から対応する状態を取得してから、実行すべきメソッドを返す必要があります。