• Zuhause
  • Artikel
  • Beibehaltung eines einheitlichen App-Status für iOS-Geräte mit schlechter Konnektivität
Veröffentlicht am 16-03-2019

Beibehaltung eines einheitlichen App-Status für iOS-Geräte mit schlechter Konnektivität

Clutter betreibt eine Flotte von über 500 iOS-Geräten im Inland und verwendet eine vorinstallierte interne iOS-Anwendung, um unsere Abhol- und Zustellvorgänge zu vereinfachen. Die App ermöglicht es unseren Mover-Teams, die Habseligkeiten eines Kunden vor Ort zu inventarisieren. Wenn Sie Bilder der Artikel vor Ort aufnehmen, können unsere Kunden über unser Kontoportal auf Ihre persönlichen Gegenstände zugreifen und die Rückgabe bestimmter Artikel verlangen.

Wenn sich Clutter beim Kunden befindet, um entweder Inventar abzuholen oder zurückzuschicken, muss unsere interne iOS-Anwendung in der Lage sein, dem Kunden eine genaue Zusammenfassung der aktuell verwendeten Speichermenge anzuzeigen. Da dies in der Regel bei einem Kunden vorkommt, müssen wir eine schlechte oder keine Verbindung zum Internet herstellen.

Um dem Kunden eine Rechnung zukommen zu lassen, die die vor Ort geleistete Arbeit widerspiegelt, und um den Status des Auftrags aus der Ferne zu verfolgen, müssen wir jede Gelegenheit nutzen, um den Auftrag möglichst genau darzustellen.

Technologie

Anfragen an den Server

Anfragen an unser Backend werden in einer Prioritätswarteschlange serialisiert, sodass bestimmte Statustransaktionen in der Reihenfolge der Erstellung gesendet werden können, wenn die Verbindung zu unseren Servern schlecht ist. Lokale Zustandsübergänge auf eifrige Weise, um das erwartete Ergebnis auf dem Server widerzuspiegeln.

Echtzeit-Client / Server-Synchronisierung

Der Client / Server-Status wird mithilfe einer Kombination aus Client-zu-Server-Polling und Client-zu-Client-Multipeer-Konnektivität synchronisiert. Die Abfrage unseres Backends ist durch die WAN-Verfügbarkeit begrenzt, während der Multipeer auf mehrere Meter zwischen den Clients beschränkt ist. Durch die Kombination der beiden Ansätze konnten wir jedoch Halbzeit-Aktualisierungen einer laufenden Bestellung implementieren.

Server-Abfrage

Wir erstellen für jeden aktiven Auftrag einen Kanal, der in einem festgelegten Intervall nach Änderungen abgefragt werden kann, die von einem der Clients im Job vorgenommen wurden. Der Client zeichnet auf, wann das letzte Mal erfolgreich abgefragt wurde, und fordert alle Änderungen seit dem letzten Einchecken an.

Multipeer-Konnektivität

Wir verwenden eine Apple-Funktion namens MultipeerConnectivity, die es zwei oder mehr iPhones ermöglicht, Daten über Wi-Fi und Bluetooth miteinander zu senden. Die meisten Benutzer sind mit dieser Technologie über die AirDrop-Funktion auf iPhones vertraut.

Multipeer wurde ursprünglich für Spiele entwickelt, eignet sich jedoch hervorragend für jede App, die offline arbeiten muss. Seit wir damit arbeiten, erhält der Lead Mover für einen Job jedes Mal eine Nachricht, wenn ein Mitglied einen Kundenartikel hinzufügt oder ändert, auch ohne Internetverbindung.

Konflikte lösen

Wir verwenden einen Algorithmus, der Google Docs ähnelt, damit mehrere Personen gleichzeitig Artikel zu einer Bestellung hinzufügen können. Selbst wenn zwei Personen fast gleichzeitig den Barcode eines Artikels ändern, lösen wir den Konflikt automatisch im Hintergrund.

Um Konflikte in einer laufenden Reihenfolge aufzulösen, verwenden wir ein Konsistenzmodell mit zwei Arten von Transformationen: Tombstoning und zuletzt aktualisiert.

Letzte Aktualisierung der Transformation

Entweder durch böswillige Absicht oder durch Zufall kann es vorkommen, dass die Ortszeit eines iPhones von der unseres Servers abweicht (oder "driftet"). Wir erfassen die Uhrendrift zu Beginn einer Teammitgliedersitzung, um die Serverzeit zu ermitteln. Wir verwenden dann den neuesten Zeitstempel für eine Transformation, um zu bestimmen, welcher angewendet werden soll. Ein Beispiel für diese Transformation in Aktion lautet wie folgt: Angenommen, ein Teammitglied kategorisiert ein Element als kleine Box. Dann kommt ein anderes Teammitglied und stellt fest, dass die Box tatsächlich eine große Box ist. Sie ändert dann die Kategorie des Elements und schließlich werden alle Kunden des Teammitglieds aktualisiert, um "großes Kästchen" für das Element zu sagen. In diesem Szenario ist es von Vorteil, dass alle Clients die aktuellsten Änderungen anzeigen, da Fehler korrigiert werden können.

Grabstein verwandeln

Bestimmte Datentypen sollten verworfen werden, nachdem ein Client sie gelöscht oder für ungültig erklärt hat. Ein Beispiel für eine Transformation eines Kundenartikels, beispielsweise eine Schachtel mit Fotos, würde folgendermaßen aussehen. Nehmen wir an, wir inventarisieren einen Artikel, aber der Kunde entscheidet, dass er ihn nicht aufbewahren möchte. In diesem Fall würde das Teammitglied den Artikel aus einer aktiven Bestellung löschen. In diesem Szenario wäre es für das Team verwirrend, wenn das gelöschte Element plötzlich wieder angezeigt wird, wenn ein anderes Teammitglied seine Fotos ändert. Daher werden Aktualisierungen an einem veralteten Objekt ignoriert.

Fazit

Die leistungsstarke Multipeer-Funktion von iOS in Kombination mit der Abfrage an unser Backend ermöglicht es uns, unseren Kunden eine genaue Rechnungsstellung zu bieten und unserem Team eine genaue Darstellung der laufenden Reihenfolge zu ermöglichen.

Siehe auch

Lösegeld Staffel 3 Episode 5 Full HD-QualitätErpressung Staffel 3 Episode 5 “Leben und Gliedmaßen” HD-Qualität {3x5}Sehen! Ransom Staffel 3 Episode 5 "Leben und Gliedmaßen" Free HDErpressung Staffel 3 Episode 5 {3x5} "Life and Limb" HD OnlineImmobilienmakler bereiten sich auf Tech-Unternehmen vorWie man Swertres Ergebnis gewinnt | Erfahren Sie, wie Sie das Lotto-Ergebnis von PCSO gewinnen können?