Unsere CargoRocket Mobile App

Dieser Artikel soll Einblicke geben in die Idee und Entwicklung der ersten mobilen Lastenrad-Routing Applikation. Um mehr über den zugrundeliegenden Algorithmus zu erfahren lohnt sich ein Blick in unseren Artikel “Der technische Aufbau unseres Lastenrad Routing” Zum Ende des Artikels findet sich eine technische Beschreibung des Quellcodes der App.

Motivation

Mobidata Hack

Schon während des MobiData BW 2020 Hackathons, bei dem die Idee zum CargoRocket Lastenradrouting entstand, überlegten wir, wie wir das fertige Routing am besten präsentieren, validieren und am Ende auch verwendbar machen könnten. Schnell war klar, dass sich eine App für mobile Endgeräte sich besonders anbietet. Leider kam es während dem Hackathon zu Technischen Schwierigkeiten, die uns daran hinderten schon zum Ende der 48h eine funktionsfähige App zu präsentieren. Als Ergebnis reichten wir als Routing-Demonstator eine Web-Applikation ein, die das Basisrouting auf eine einfache Weise visualisierte (Github Repo [Archived]).

Screenshot of Launchpad Web-Applikation
Screenshot der Launchpad Web-Applikation

Der nächste Schritt

Für den folgenden Förderzeitraum steckten wir uns ambitionierte Ziele. Innerhalb von 3 Monaten sollte eine mobile Applikation für Android und iOS entwickelt werden.

Aktuell (20.06.21) befindet sich die Android version im BETA-Test.

Während dieser Testphase erhoffen wir uns Feedback zur App, aber auch zu unserem Routing und unterliegenden Index. Bereits in einer frühen Phase die App für Tester:innen zur Verfügung zu stellen ist aus unserer Sicht eine riesige Chance hier schnell und effizient breite Rückmeldungen für die weitere Entwicklung einholen zu können. Tester:innen haben außerdem die Möglichkeit sich direkt auf der geplanten Route navigieren zu lassen und vorort Hindernisse zu melden.

Die iOS version der App wird im Anschluss des BETA-Tests unter Android in einigen Wochen im App-Store zum Download zur Verfügung stehen.

Datenerhebung

Um unser Lastenrad-Routing weiter zu verbessern, sollen zukünftig neben User-Feedback auch Informationen zum realen Fahrverhalten zurück in unsere Bewertung einfließen. So möchten wir über Daten der App tatsächliche Geschwindigkeiten ermitteln, oder Streckenabschnitte identifizieren, bei denen die Fahrer:innen sich für andere Wege als die vorgeschlagenen entschieden haben. Bei der Verwendung solch personenbezogener Mobilitätsdaten steht die Privatsphäre der Nutzer:innen für uns an vorderster Stelle. Vor Beginn der Datenerhebung wird hierzu ein weiterer Artikel über die genaue Anonymisierung und Verwendung der Daten erscheinen.

Beta-test

Werbe Banner CargoRocket App

Um ein sinnvolles Lastenradrouting zur verfügung stellen zu können benötigen wir dein Feedback. Nach vielen Nachforschungen und Tests können wir nur mit echten Streckenverläufen und echten Fahrer:innen das Routing weiter verfeinern.

Um mitzumachen registriere dich unter: https://play.google.com/apps/testing/de.cargorocket

Feedback

Uns ist bewusst, dass der aktuelle Stand der App bei weitem noch nicht perfekt ist. Hier gibt es einiges zu verbessern und dazu bist du gefragt. Damit wir dein Feedback so schnell wie möglich in die App und das Routing integrieren können wären folgende Punkte wichtig:

  • Das Routing ist momentan optimiert für kommerzielle Lastenradlogistik und unterscheidet sich daher teilweise stark von einem profil für Freizeit-/Privatbedarfs-Radverkehr.

  • In der App befindet sich unter Einstellungen > Feedback eine Feedbackfunktion, die für kurze Hinweise am besten genutzt wird. Auch während des Routings kann mit der “Stern”-Funktion Feedback zum aktuellen Streckenabschnitt gegeben werden. Für komplexeres Feedback sendet uns gerne eine Mail.

  • Gibt es Schlatflächen und Flows in der App die dir unintuitiv oder übermäßig komplex vorkommen?

  • Sind die vorgeschlagenen Routen aus deiner Sicht sinnvoll und falls nein, welche Kriterien sind hierbei entscheidend?

  • Würdest du eine Routing App für deine Fahrten generell nutzen? Welche Faktoren sind hier für dich wichtig?

Technische Details

Im folgenden Abschnitt findet sich eine kurze Beschreibung des technischen Aufbaus unserer App. Diese Beschreibung ist an Entwickler gerichtet und daher teilweise sehr technisch.

Um möglichst schnell beide großen mobilen Plattformen (IOS, Android) bedienen zu können setzten wir bei der Technologiewahl auf ein cross-platform Framework. Zur Auswahl standen dabei unter Anderen NativeScript, Cordova, Flutter und ReactNative. Ausschlaggebendes Kriterium bei der Entscheidung war für uns die Unterstützung von Mapbox Navigation.

Die Anfänge

Während des Hackathons versuchten wir uns mit einer Implementierung in Flutter. Dabei stießen wir aber auf einen schwerwiegenden Bug bei der bereits existierenden Mapbox Navigation Library (Github Issue flutter_mapbox_navigation). Daher entschieden wir uns kurzfristig auf einen Fork von mapbox-gl-directions zurückzugreifen und vorerst nur die schon oben gezeigt Webvariante unseres Service anzubieten. In der Zukunft werden wir auch im Web wieder einen voll funktionsfähigen Prototypen anbieten. Dieser wird auf Vue 3 basieren und hier in einem weiterem Blog Artikel vorgestellt werden. Die gemachten Erfahrungen beim Hackathon führten zur Auswahl von React Native, als flexibles Framework für unsere Demo-App.

Projektstruktur

Um das Projekt möglichst simpel und aufgeräumt zu halten verwenden wir unterschiedlichste Methodiken. Generell sind natürlich eine saubere Versionsverwaltung und der Einsatz eines strengen Linters für alle unsere Applikationen Pflicht. Darüber hinaus setzen wir bei der App auf eine moderne schreibweise von React unter der Verwendung von “Functional Components” und eine State Verwaltung unter Zuhilfenahme von React hooks.

Da die Entwicklung in einem sehr beschränkten zeitlichen Rahmen stattfand haben wir an vielen Stellen auf gut gewartete Libraries zurückgegriffen. Besonders die Auswahl eines location providers unter Android ist uns dabei schwer gefallen, da die native Variante im Android core deutlich schwächere Erbenisse lieferte, als die durch Google Services bereitgestellte. Da wir uns entschieden haben ohne Google Services unsere App anbieten zu können hat sich nach einigen Tests “react-native-geolocation” als beste cross-platform Library herausgestellt.

Um das Aussehen der App auf beiden Platfformen möglichst ähnlich zu halten und hier nicht für komplexere Design Elemente in die Tiefe der einzelnen Plattformen gehen zu müssen greifen wir auf UI Kitten zurück.

Mapbox Odysee

Wie bereits erwähnt war für uns zu Beginn des Projekts klar, dass wir durch limitierte Ressourcen auf die Navigations Ansicht des Herstellers Mapbox zurückgreifen würden.

Um unser Routing direkt in Mapbox Navigations nutzen zu können forkten wir die inoffizielle ReactNative Library und bauten sie zur Nutzung mit unserem eigenen Routing Backend um (Link zum Fork). Falls ein eigener Umbau angestrebt wird kann auch dieses Issue sehr hilfreich sein.

Während der Entwicklung zeigte sich aber leider, dass das Pricing Schema das Mapbox für seine Navigationsansicht ansetzt sich nicht für unseren Usecase eignet. Während der Entwicklung unserer App alleine sind uns hohe, unerwartete Kosten durch die Nutzung der Navigation API entstanden. Dankenswerterweise konnten wir in Gesprächen mit Mapbox direkte Unterstützung erhalten, wodurch uns dieser Betrag final nicht in Rechnung gestellt wurde. Es war aber dennoch klar, dass eine weitere Nutzung von Mapbox Navigations für uns keine nachhaltige Option darstellt.

Eine einfache Alternative war gefragt, die lediglich Vector-Map-Tiles von Mapbox abruft. Die aktuelle Lösung für diese Ansicht besteht daher momentan aus einer eigenen Entwicklung auf Frameworkebene, unter Nutzung von UI Kitten Komponenten und “@react-native-mapbox-gl/maps” zur Kartendarstellung.

Die verwendete Datenstruktur orientiert sich dabei momentan stark an dem von Mapbox entwickelten Format. In Zukunft wollen wir hier eine direktere Verwendung des Graphhopper Route Formats anstreben.

Deployment

Generell streben wir eine Veröffentlichung im Google Play Store, F-Droid, der Huawei App Gallery und dem Apple App Store an.

Dabei findet das Deployment automatisiert mit Hilfe von fastlane statt. Dieses Tool ermöglicht es uns Inhalte und Versionen zwischen den Anbietern konsistent zu halten und spart uns im Release-Prozess viel Zeit.

Call for Contribution

Wir sind stolz, dass wir unseren Code zu 100% OpenSource anbieten können und freuen uns sehr über jede Art der Beteiligung an unseren Projekten. Jedes Feedback, Issue, Pull-Request und Kommentar ist willkommen und bereichert das Team!