BreakOutEvent / breakout-frontend

Web Frontend
GNU Affero General Public License v3.0
6 stars 2 forks source link

GPS-Tracking optimieren #396

Open linatic7 opened 2 years ago

linatic7 commented 2 years ago

Anforderung: Während des Events wird der Standort von mind. eines Teilnehmers eines Team regelmäßig und automatisch getrackt. Bei Android-Geräten funktioniert das GPS-Tracking während des Events meist fehlerhaft (große Sprünge bei Standorten. unregelmäßige Aktualisierung, manchmal gar keine Aktualisierung). Bei iOS-Nutzern wird der Standort alle 15 Minuten und zusätzlich bei neuen Postings aktualisiert. Dies soll auch bei Android-Nutzern automatisch im Hintergrund geschehen. Alternative Möglichkeit ohne App: Standorttracking über Website möglich machen. Während des Events trackt die Website sobald sie auch nur im Hintergrund auf einem Smartphone geöffnet ist, alle ca. 15 Minuten den Standort (ohne sie aktiv geöffnet zu haben!). Wichtig: Nur während 36 Stunden und nur für Teilnehmer.

sibbl commented 2 years ago

Hallo Break-Out 😊ich denke bei dem Issue kann ich mich gut mit einklinken.

Vorab: das Standort-Tracking via Webseite wird technisch aus meiner Sicht nicht möglich sein, solange die Seite nicht geöffnet ist. Dazu zwei lesenswerte Issues vom W3C, die die Standards diskutieren und entweder bereitstellen oder wie in diesem Fall aus Gründen eben nicht:

Hinsichtlich Android dürften folgende Zeilen die relevanten Code-Stellen sein: https://github.com/BreakOutEvent/breakout-android/blob/b5d09de6c2702e5d6e428e9920259c41fd9e5147/app/app.js#L87-L96

Der Operation watchPosition kann man diverse Optionen übergeben, die hier hier von React Native in der vom Projekt aktuell verwendeten Version 0.60 dokumentiert sind.

Dabei fällt mir vor allem auf, dass enableHighAccuracy deaktiviert ist. D.h. GPS wird aktuell gar nicht verwendet, sondern lediglich anhand von WLAN-Netzwerken und dem Mobilfunknetz mehr oder weniger gut geschätzt wo man sich befindet. iOS setzt dafür keine Einschränkung und nutzt vernünftigerweise GPS.

Der Grund für diese Entscheidung dürfte gewesen sein, dass man watchPosition kein Intervall mitgeben kann. D.h. aktiviert man es, ist GPS vermutlich dauerhaft aktiviert und es zieht unnötig Akku. Genaue Erfahrungswerte habe ich dazu bei React Native nicht.

React Native hat seit Version 0.66 keine Geolocation-Anbindung mehr direkt mit an Bord, sondern dies wurde in ein eigenes Projekt ausgelagert. Weitere Optionen wie z.B. ein Intervall für die Standort-Aktualisierung sind leider nicht dazu gekommen. D.h. man ist immer noch sehr darauf angewiesen was da intern entschieden wird und man hat nicht die Kontrolle, wie man sie mit einer nativen Android-App hätte.

Um dies zu ermöglichen, würde ich vorschlagen auf ein anderes Modul wie react-native-location zu wechseln. Dieses bietet Einstellungen wie interval, fastestInterval, maxWaitTime sowie bei desiredAccuracy auch den Modus balancedPowerAccuracy. Dinge, die auf Android-Ebene ohne React Native auch nicht besser konfigurierbar wären (siehe Android-Doku) und meiner Meinung nach zum Erfolg führen können.

Ich würde mich sehr über Feedback dazu freuen und - sofern nicht anders abgesprochen - gern auch im April daran arbeiten. Vielleicht können wir somit ein paar Parameter auf verschiedenen Geräten ausprobieren und Akkuverbrauch sowie Genauigkeit der Ergebnisse über ein paar Wochen beobachten?