Moovme

11.08.2020 Jonas L. App-Kritik

Der MDV (Mitteldeutscher Verkehrsverbund) hat die “Mobilitäts-App” MOOVME “präsentiert”.

MOOVME ist die neue App der Verkehrsunternehmen im MDV für Verbindungsauskünfte und Ticketkauf in frischer und anwenderfreundlicher Gestaltung.


Interessant fand ich die folgende Aussage:

Nach zehn erfolgreichen Jahren ist eine komplette Überarbeitung nötig geworden. Die bisherige App easy.GO wird daher demnächst abgeschaltet.


Ich habe bisher immer diese freie Anwendung verwendet. Ich habe mir das Easy.GO vor einigen Jahren mal angesehen. Im Play-Store-Eintrag ist immer noch ein Screenshot vom Startbildschirm an erster Stelle und genau dieser war damals, als ich es mir angesehen habe, extrem nervig. Nach dem Öffnen der App hat man den für eine Weile zu sehen bekommen. Ich glaube nicht mal, das da irgendetwas geladen wurde, wahrscheinlich war es nur ein Timer.

Die “komplette Überarbeitung” ist wahrscheinlich eine Formulierung von der Marketingabteilung. Die alte App stammt von “TAF mobile GmbH”, die neue von einem anderen Lieferanten. Es ist also eher ein Lieferantenwechsel als eine Überarbeitung.

Der Paketname von “Moovme” ist “de.hafas.android.mdv” - wenn man da nicht schon einen Firmennamen erkennen kann. Noch eindeutiger wird es aber mit https://reports.exodus-privacy.eu.org/en/reports/140181/ und https://reports.exodus-privacy.eu.org/en/reports/138724/. Was man da sieht? Der DB Navigator hat mehr Tracker. Der Abschnitt “Signed by” ist aber nicht unbedeutend. Beide Anwendungen wurden mit dem gleichen Schlüssel signiert und werden daher wahrscheinlich in der gleichen Firma kompiliert und signiert (oder die geben allen Kunden den gleichen Signierschlüssel mit, aber so blöd sind die sicherlich nicht).

Moovme und der DB Navigator haben eine ähnliche Funktion, aber das Design ist anders und die Bedienelemente sind auch nicht in beiden Apps genau gleich angeordnet. Wie ähnlich oder unterschiedlich die beiden Anwendungen auf der technischen Ebene sind, lässt sich auf dieser Basis nicht einschätzen.

Dann sehe ich mir die Anwendung mal live an. Hierzu verwende ich die Version 1.1.0, die SHA512-Prüfsumme der APK-Datei war

e2775707997b6aff2fdb0a62e355122b1a2eb47f123c16195fbc094476ae5274fdd745653a59c56879666088d4c2dc254026ddf97714d68af137ca0a24c37f09

Nach dem Starten der App gibt es die klassische Begrüßung.

Datenschutzhinweis bei Moovme

Gut finde ich, dass das direkt nach dem Starten der App kommt. Das Verhalten bei der Benutzung der Zurück-Taste an dieser Stelle ist nicht falsch, aber auch nicht ganz richtig: Es passiert Nichts. Es wird nicht als Zustimmung interpretiert. Allerdings sollte die Zurück-Taste an so einer Stelle die App schließen.

Ich habe noch nicht zugestimmt und bekomme dennoch etwas zu sehen, was nicht sein muss:

Abruf der Netzplanliste

Hier wird https://iphone.hafas.de/mdv/networkmaps.json abgerufen. Die Antwort ist eine Liste von Netzplänen. Warum steht da iphone und nicht api in der URL? Und warum wird das zweimal abgerufen, einmal per GET und einmal per POST-Anfrage, obwohl bei beiden die Antwort gleich ist? Was bringen die zipUri und zipHdUri, wenn beide gleich sind? Wieso gibt es eine zipSize und zipHdSize, aber nur einen hash und keinen hdHash?

Von der Länge her ist der Hash eine MD5-Prüfsumme, und wenn man die Zip-Datei herunterlädt dann passt diese Prüfsumme zu dem Archiv. Auch zipSize passt zum Archiv, das ist die Größe in Bytes. Was hat MD5 hier zu suchen? Es geht hier wahrscheinlich nur um die Erkennung von neuen Dateiversionen und nicht um die Erkennung von Manipulationen. Ich halte es dennoch für eine ungünstige Idee, MD5 noch zu verwenden, weil man es dann möglicherweise auch an Stellen verwendet, bei denen es um die Sicherheit geht.

In der zip-Datei sind Bildfragmente in verschiedenen Zoomstufen, die werden zur Laufzeit passend geladen und zusammengesetzt werden. Damit kann man auch mit wenig RAM und Rechenleistung ein ordentliches Zoomen ermöglichen.

Bei den Namen gibt es immer d und e. Am Anfang der Datei sieht man, was die Bedeutung davon ist:

    "groups": [
        {
            "description": {
                "d": "Netzpläne",
                "e": "Networkmaps"
            },
            "name": "network"
        },
        {
            "description": {
                "d": "Tarifzonen",
                "e": "Tariff zones"
            },
            "name": "tarif"
        }
    ],

Das ermöglicht eine Angabe vom deutschen und englischen Namen. Das hat man bei den Netzplänen nirgendwo verwendet - also beide Felder haben immer den gleichen Text.

Auch mein Lieblings-(Firebase-)SDK hat sich schon mal gemeldet, obwohl ich noch nicht zugestimmt habe:

Registrierung von Moovme bei Google

Und es ist recht eindeutig, dass diese Anfrage von Moovme kam. Allerdings ist das auch ein “Luxusproblem”, weil es die App nur im Play Store gibt und man damit bei einem regulären Download schon Google darüber informiert.

Etwas irritierend war diese Anfrage:

Moovme meldet sich bei iOS ab?

Was ist das flow_trm_topic_ios? Da X-delete: 1 in den Headern steht, scheint es eine Abmeldung zu sein. Aber warum meldet man sich hier vom iOS-Push-Kanal ab? Ist man da am Anfang automatisch angemeldet?

Mit etwas Geduld kann man ein weiteres SDK beobachten. Es sendet eine Anfrage an https://piwik.hacon.de/piwik.php mit folgendem Request Body:

{
    "requests": [
        "?cdt=2020-07-14%2019%3A44%3A32%2B0200&_idvc=1&url=https%3A%2F%2Fde.hafas.android.mdv%2F&idsite=60&send_image=0&_idts=1594748672&res=1080x1920&apiv=1&new_visit=1&ua=Dalvik%2F2.1.0%20%28Linux%3B%20U%3B%20Android%206.0%3B%20Android%20SDK%20built%20for%20x86%20Build%2FMASTER%29&lang=de&uid=0d7fb9f3-7f42-4475-806a-7f3dd3fd620d&_cvar=%7B%221%22%3A%5B%22Platform%22%2C%22Android%22%5D%2C%222%22%3A%5B%22OS%20version%22%2C%226.0%22%5D%2C%223%22%3A%5B%22App%20version%22%2C%221.1.0%20%289%29%22%5D%7D&rand=82081&_id=7ce6fa0685eb476a&rec=1",
        "?e_c=app-brought-to-front&apiv=1&cdt=2020-07-14%2019%3A44%3A32%2B0200&e_a=-&url=https%3A%2F%2Fde.hafas.android.mdv%2F&idsite=60&uid=0d7fb9f3-7f42-4475-806a-7f3dd3fd620d&rand=76082&_id=7ce6fa0685eb476a&rec=1&send_image=0",
        "?e_c=permission-location&apiv=1&cdt=2020-07-14%2019%3A44%3A32%2B0200&e_a=off&url=https%3A%2F%2Fde.hafas.android.mdv%2F&idsite=60&uid=0d7fb9f3-7f42-4475-806a-7f3dd3fd620d&rand=41566&_id=7ce6fa0685eb476a&rec=1&send_image=0",
        "?e_c=permission-contacts&apiv=1&cdt=2020-07-14%2019%3A44%3A32%2B0200&e_a=off&url=https%3A%2F%2Fde.hafas.android.mdv%2F&idsite=60&uid=0d7fb9f3-7f42-4475-806a-7f3dd3fd620d&rand=42332&_id=7ce6fa0685eb476a&rec=1&send_image=0"
    ]
}

Als Antwort gibt es ein 1x1-Bild bzw. ein Tracking-Pixel - was bei einer Webseite einen Sinn hat, wenn man die URL per Bild-Einbindung aufruft, aber hier nicht weiter stört.

Positiv ist, dass das verwendete SDK eine freie Software ist und dass das Backend nicht ausgesourct wird, sondern vom Entwickler betrieben wird. Negativ ist, das ich noch nicht die Datenschutzbestimmungen akzeptiert habe und ich so eine Anfrage sehe.

Da Piwik eine freie Software ist, gibt es auch eine öffentliche Dokumentation dazu. In diesem Fall unter https://developer.matomo.org/api-reference/tracking-api.

  • _id ist eine eindeutige ID
  • e_c ist die Event-Kategorie
  • e_a ist das Event-Aktion

Also ist z.B. die Kategorie permission-location, die Aktion off. Ein anderes Beispiel ist das Event app-brought-to-front ohne genauere Aktion bzw. mit - als Aktion.

Dann öffne ich jetzt einmal die im Dialog verlinkte Datenschutzerklärung - das führt zu https://www.moovme.de/app/datenschutz-de/. Bevor ich die Datenschutzerklärung lesen kann soll ich in einem Consent-Dialog zustimmen. Aber bereits beim Laden der Seite gab es Anfragen an fonts.gstatic.com, innocraft.cloud, facebook.com und hotjar.com. Da ich die Datenschutzerklärung lesen will, stimme ich zu … zum Glück ist das jetzt nur im Tor-Browser.

Die Kurzversion der Datenschutzerklärung (mit dem Stand 30.06.2020):

  • am Anfang der DS-Erklärung ist MDV verantwortlich
  • HaCon (Firma, die die Anwendung entwickelt und betreibt) ist aufgeführt
    • bei 6.1.2 - Registrierung für Ticket-Shop
    • bei 6.3.2 - Ticketkauf
    • bei 6.5.2 - Fehlerlogging - aber laut 6.5 nur beim Ticket-Shop
    • bei 6.6.2 - Präventionsmaßnahmen bei App-Missbrauch
    • bei 8.3 - Nutzungsstatisik - Es gibt ein Opt-out in der App, aber bei mir kam es schon zu Übertragungen vor dem Akzeptieren in der App; Weiterhin ist hier von einer Cookie-ID die Rede, der Begriff erscheint mir falsch
    • bei 9 - Google Maps - lobenswert: Man kann in der App auf OSM-Server von HaCon umstellen

Nach dieser Vorbetrachtung akzeptiere ich die Datenschutzbestimmungen in der App. Dann werde ich unvermittelt nach dem Standortzugriff und dem Zugriff auf meine Kontakte gefragt.

Dazu verweise ich mal auf https://material.io/design/platform-guidance/android-permissions.html#request-types.

Der Standortzugriff braucht bei einer Navigationsanwendung keine Erklärung - aber er ist nicht zwangsläufig erforderlich. Was sagt die Grafik dazu? “Ask in context” und NICHT “Ask up-front”.

Bei den Kontakten ist es nicht klar, warum die benötigt werden. Und zwangsläufig erforderlich ist das auch nicht - das macht dann “educate in context” und nicht “Ask up-front”.

Also zwei Berechtigungsanfragen, die nicht an diese Stelle passen. Da hätte man an dieser Stelle nach der Telemetriezustimmung fragen können, aber das wird ja nicht vom Betriebssystem erzwungen, sodass man da gar nicht erst nachfragt.

Nun soll ich das Verbundunternehmen aussuchen und die deutsche Bahn, für die der gleiche Entwickler auch eine andere App gebaut hat, ist schon vorausgewählt. Ich entscheide mich für die Hallesche Verkehrs-AG.

Aus Nutzersicht sehe ich dann den Verbindungssuche-Bildschirm. Auf dem Netzwerk sehe ich zwei Anfragen - an https://mdv.tickeos.de/uploads/mobile/de/cb14c1aa20f3b5ca1e45e1886125eb57ad2978ec und https://mdv.tickeos.de/uploads/mobile/de/cdce6c198a4c4be8b04e110adee9d46698183e0a.

Diese Anfragen haben als Anfrage und Antwort nicht lesbare binäre Daten - wahrscheinlich eine zusätzliche Verschlüsselungs-/ Verschleierungsebene.

Was ist tickeos.de? Eine Weiterleitung zu https://www.eos-uptrade.de/. Und das ist ein Ticket-Shop-Dienst. Bin ich beim Lesen der Datenschutzerklärung davon ausgegangen, das ich mich automatisch beim Ticket-Shop registriere? Nein. Allerdings relativiert sich das dadurch, das der Ticketshop laut Datenschutzerklärung von der HaCon betrieben wird. Unter https://www.eos-uptrade.de/en/about-us steht “2019: HaCon increases its share in eos.uptrade to 100%“. Also ist das jetzt ein Teil von HaCon? Ich weiß es nicht.

Piwik sendet währenddessen wirklich jedes Detail bei der Benutzung der App - welche Ansicht ich geöffnet habe bzw. sehe (die Verbindungssuche und die Einstellungen der App), das ich das Menü öffne. Ja sogar das Detail, das ich das Opt-out-Dialog aufgerufen habe. Aber nachdem ich in den Einstellungen die Nutzungsstatistik abgestellt habe, sehe ich keine Anfragen mehr von Piwik. Das funktioniert also - warum ist es dann nicht auch vor dem Akzeptieren der Datenschutzbestimmungen aus und warum kann ich das Opt-out nicht vor dem Akzeptieren der Datenschutzbestimmungen durchführen?

Dann öffne ich die Karte. Was sehe ich?

Eine Google-Maps-Integration in Moovme darf nicht fehlen

Auch die Anfragen bestätigen, das die Karteninhalte von Google kommen. Die OSM-Option habe ich an dieser Stelle nicht gefunden. Später werde ich erfahren, das ich die über das Symbol unten rechts auswählen kann, aber dazu … später.

Dann mache ich mal eine Verbindungssuche - vom Marktplatz zum Hallmarkt. Wer die beiden Haltestellen kennt, weis, wie nutzlos diese Fahrt wäre. Aber auch anhand der Namen kann man darauf kommen, warum das so sinnlos ist.

Das wird dann über reiseauskunft.insa.de abgewickelt:

Moovme-Wegsuche vom Marktplatz zum Hallmarkt

Die Anfrage enthält die Information, was ich für ein Gerät und welche App ich benutze. Technisch notwendig ist das sicherlich nicht.

Generell ist es möglich, die Fahrplanauskunftsfunktion der App ohne Registrierung zu nutzen. Jede Verbindungsanfrage in der App findet vollständig anonym statt. Die abgefragte Verbindung weist erst einen Personenbezug auf, wenn Sie für die Strecke ein Ticket über die App kaufen.


Wahrscheinlich ist es rechtlich betrachtet auch mit diesen Angaben anonym - erwartet hätte ich es dennoch nicht.

Am Anfang vom Request Body gibt es eine AID, und wenn man die APK-Datei als Zip-Archiv entpackt und darin grep ausführt, dann findet man die dort wieder in res/raw/haf_config_base.properties. Die Datei hat 1435 Zeilen (wobei viele davon leer sind). Im folgenden eine Auswahl von Zeilen, die interessant aussehen:

DATA_VERSION=4
BASE_QUERY=reiseauskunft.insa.de/bin/mdv
SEARCH_METHOD=ONLINE
GLOBAL_OFFLINE_SWITCH=1
USE_OFFLINE_DATA=0
USE_OFFLINE_STATIONS_ONLY=0
LANGS=en:de
HCI_ENABLED=1
URL_HCI_SERVER=<QUERY-HOST>
URL_HCI_DOCUMENT=<QUERY-PATH>/mgate.exe
HCI_EXT=NASA.4
HCI_AUTH_TYPE=AID
HCI_AUTH_AID=BDRnVsPP7CuQsf69
HCI_CLIENT_ID=NASA
HCI_VALIDATION=MICMAC
HCI_CHECKSUM=BgAWZsLRLWwb5GANB+gqzGVLUqmpHBf2Wv2Ve55d0R8=
OSM_URL_PATTERN=https://mdv-gis-$(host).haf.as/hafas-tiles/inno2017/1/%(z)/%(x)/%(y).png
OSM_RETINA_URL_PATTERN=https://mdv-gis-$(host).haf.as/hafas-tiles/inno2017/2/%(z)/%(x)/%(y).png
OSM_HOST_NUMBER_LIST=a,b,c,d
URL_FAQ=https://www.moovme.de/app/faq-<LANG2>/
URL_DISTURBANCE=https://www.mdv.de/app/stoerungen/
URL_FEEDBACK=https://mdv-app.hafas.de/kontaktformular/?Language=<LANG2>&Model=<PARAM_MODEL>&SystemName=Android&SystemVersion=<PARAM_SYST_VER>&AppVersion=<PARAM_APP_VER>&env=<PARAM_ENV>
URL_KONTAKT=https://www.moovme.de/app/kontakt-<LANG2>/
MDV_NETWORK_URL=https://mdv-gis-$(host).haf.as/hafas-tiles/mdv_tracks/$(scale)/$(z)/$(x)/$(y).png
TICKETING_INFO=eos MobileShop 2020.04 c4220 e15c26afe
TICKETING_SYSTEM=2
TABLET_ENABLED=0
LAYOUT_ROTATION_ALWAYS_ENABLED=0
12_HOURS_TIME=AUTO
DELAYED_TIME_FORMAT=SCHEDULED_DELAY
BRING_ME_HOME_AVAIL=0
SHOW_HIDDEN_FOOTWALKS=0
USE_UP_LIKE_BACK=1
SHOW_MY_TRAIN_TOGGLE_COMMAND=0
TRACKING_AVAILABLE=1
TRACKING_ENABLED_DEFAULT=1
TRACKING_BASIS_VERSION=4.4
URL_INFO=https://www.moovme.de/app/impressum-<LANG2>/
SETTINGS_PRIVACY_SHOW=0
SIMPLE_OPT_IN_DIALOG_ID=1
TUTORIAL_ENABLED=0
TUTORIAL_PICTURE_ONLY=0
TUTORIAL_ID=1
TUTORIAL_IGNORE_APP_UPDATE=0
WHATS_NEW_ENABLED=0
WHATS_NEW_ID=0
WHATS_NEW_URL=file:///android_asset/www/whatsnew/index.html?lang=<LANG2>&versionName=<VERSION_NAME>
ENABLE_PUSH=3
PUSH_USER_AGREEMENT_REQUIRED=1
ENABLE_LINE_PUSH=0
ENABLE_CONSECTION_SUBSCRIPTION=0
PUSH_CONSECTION_SUBSCRIPTION_INFO_TEXT=NEGATIVE

Der Wert für die AID ist nur hardkodiert - warum dann überhaupt eine “Authentifizierung” für die Fahrplanauskunft?

Das sieht auch sehr nach einem Baukasten aus. Der einzige MDV-spezifische Parameter in der ganzen Datei war MDV_NETWORK_URL. Der DB-Navigator hat auch so eine Datei, dort sogar mit Kommentaren anstelle von leeren Zeilen. Auch er hat einige individuelle Parameter wie z.B. DBVERSIONSTRING und URL_DBRENT_AUTH_API. Also ist es wahrscheinlich ein Baukasten mit einigen Erweiterungen, die individuell für den Verkehrsbetrieb sind.

In der App gibt es einen Menüpunkt zu Fahrplanabweichungen. Vorhin habe ich URL_DISTURBANCE=https://www.mdv.de/app/stoerungen/ als einen Parameter in der Konfigurationsdatei gezeigt und genau das verbirgt sich hinter den Fahrplanabweichungen - ein WebView.

Die Ticketkauffunktion habe ich nicht benutzt, weil ich keine gültigen Bezahldaten eingeben wollte.

Die Menüpunkte Alarme und “Meine Routen” haben bei mir nicht funktioniert - oder ich war zu blöd dafür? Beim Hinzufügen wurde ich immer zur Verbindungssuche geleitet und da konnte ich eine Verbindung suchen - aber weder einen Alarm anlegen noch die Route speichern.

Dann gibt es noch den Abschnit “Informationen” in der App, aber das waren nur WebViews. Eine Sache dabei möchte ich aber anmerken: Bei der Option “Feedback” gab es nur eine weiße Leere. Da wurde die URL https://mdv-app.hafas.de/kontaktformular/?Language=de&Model=Android%20SDK%20built%20for%20x86&SystemName=Android&SystemVersion=23&AppVersion=1.1.0%20(9)&env=liveProd geladen, die im Tor-Browser funktioniert hat, aber das WebView scheinbar überfordert hat. Ich schiebe mal die Schuld auf die alte Android-Version im Emulator.


Ich habe schon lange keine Anfragen mehr gesendet - es war schon so nicht immer einfach, (sinnvolle) Antworten zu bekommen, aber die “aktuelle Situation” wäre immer so eine schöne Ausrede dafür gewsen, das ich gleich auf Anfragen verzichtet habe. Hier habe ich mich dazu entschieden, Anfragen zu senden.

Sehr geehrte Damen und Herren,

wie ich unter https://www.mdv.de/2020/07/mdv-praesentiert-neue-mobilitaets-app-moovme/ erfahren habe gab es für die Einführung von Moovme eine "Förderung des Freistaates Sachsen [und] des Freistaates Thüringen".

Soweit ich das verstehe handelt es sich dabei um Steuergelder. Möglicherweise haben Sie schon einmal etwas von der Forderung "Public Money Public Code" gehört. Damit komme ich zu meiner Frage, die ich als Anhänger der Open-Source-Bewegung habe: Was spricht oder sprach dagegen, Moovme als freie Software zu veröffentlichen bzw. warum wurde es nicht als solche veröffentlicht?


Danke für Ihre Zeit und mit freundlichen Grüßen

(Name entfernt)


Quelle: E-Mail an den MDV

Darauf gab es keine Antwort, und dabei lag das in meinem Gesendet-Ordner und ich war mir recht sicher, das ich das gesendet habe.

Dann habe ich später eine Anfrage zum OSM-Problem gesendet, weil ich eben diese Option nicht gefunden habe:

Sehr geehrte Damen und Herren,

ich habe bereits eine andere Anfrage zu einem anderen Thema gesendet und dazu keine Eingangsbestätigung oder Reaktion bekommen - das aber nur am Rande.

In der Datenschutzerklärung (https://www.moovme.de/app/datenschutz-de/) steht im Absatz 9

> Wenn Sie nicht möchten, dass Google mittels der MOOVME-App Daten
> über Sie verarbeitet, können Sie im Einstellungsbereich der App
> auf die Open Street Map (OSM) Karte ausweichen. OSM wird von
> eigenen Servern unseres Auftragsverarbeiters, der HaCon
> Ingenieursgsellschaft mbH, zur Verfügung gestellt.

Nun habe ich dazu keine Option in den Einstellungen der App gefunden. Ich habe Version 1.1.0 mit dem Versionscode 9 installiert und im Play Store wird angezeigt, das ebendiese Version die neuste verfügbare Version ist.

Wahrscheinlich hat das Support-Handbuch keine Antwort für dieses Problem. Ich akzeptiere es also, wenn es etwas länger dauert, bis ich eine Antwort zu meinem Problem bekomme. Eine zeitnahe Eingangsbestätigung und Information über den Bearbeitungsstand würde ich mir dennoch wünschen.


Mit freundlichen Grüßen

(Name entfernt)


Quelle: E-Mail an den MDV

Darauf bekam ich dann zügig (nach 2 Tagen) eine Antwort:

Sehr geehrter (Name entfernt),

vielen Dank für Ihre Anfrage.

Zu unserem Bedauern müssen wir Ihnen mitteilen, dass wir Ihre erste Anfrage nicht in unserem Post finden können. Wir möchten Sie daher bitte, uns diese Anfrage gerne noch einmal zur Bearbeitung zukommen zu lassen.

Die Umstellung auf Open Street Map können Sie wie folgt vornehmen:

- gehen Sie im App-Menü auf den Punkt "Karte"
- in der Kartenanzeige können Sie unten links über den rechteckigen grauen Button die Einstellung auf OSM vornehmen

Wir hoffen, dass wir Ihnen weiterhelfen konnten und stehen bei weiteren Fragen gern zur Verfügung.

Mit freundlichen Grüßen

(Footer entfernt)


Quelle: E-Mail vom MDV

Interessant ist, was weiter unten in der E-Mail steht:

-----Ursprüngliche Nachricht-----
Von: "moovme" (E-Mail-Adresse, die auf mdv.de endet, entfernt)
Gesendet: (Datum entfernt)
An: (E-Mail-Adresse, die auf omniphon.de endet, entfernt)

Dieses omniphon.de ist ein Dienstleister für Marketing und Vertrieb - aber das steht auch in der Datenschutzerklärung. Das habe ich bisher überlesen, aber die Suchfunktion findet es.

Dann habe ich mir die OSM-Option angesehen - meine Beobachtungen stehen in meiner Antwort:

Sehr geehrte (Name entfernt),

ich habe diese Option jetzt aktiviert. Einerseits wird das beim Schließen der App bei mir wieder zurückgesetzt, andererseits gibt es beim Aufrufen der Karte - selbst wenn auf OSM umgestellt wurde - zwei Anfragen an https://clients4.google.com/glm/mmap/api, die ein Binärdatendurcheinander enthalten, wobei darin der Paketname de.hafas.android.mdv2, der API-Key? AH0uPGEEW_vyk5HFIr6ZpbHv7JAbSIZjuQ4OowiQS8Rvq62SuBzMzOlvAsrbT5jAu2H6GLHc1GzW83I-ZYVc1lKXFhC2fGrbBFGJyZELyqlRvZKnSQLHw2ydZ78JzmJ5wT3IoOe1gAmc7s7rYXXNf7Wptx94 +Y6PjEaX2Y_YPrIHRLqvRU3gSFzA und das Modell "android:unknown-generic_x86-Android SDK built for x86" (der Android-Emulator, in dem ich die App dafür ausführe) enthalten sind.

Das passt nach meiner Interpretation nicht zur Datenschutzerklärung.

Meine andere Frage ist, was dagegen spricht, die Moovme-App unter eine freie Lizenz wie die GPL oder Apache-Lizenz zu setzen und den Quelltext offenzulegen.


Mit freundlichen Grüßen

(Name entfernt)


Quelle: E-Mail an den MDV

Die vorläufige Antwort kam dann noch am gleichen Tag:

Sehr geehrter Herr Lochmann,

vielen Dank für Ihre Rückmeldung.

Wir werden Ihre Anfrage an den 2nd-Level-Support weiterleiten und uns schnellstmöglich wieder mit Ihnen in Verbindung setzen.

Wir hoffen auf Ihre Geduld.

Mit freundlichen Grüßen

MOOVME-Kundenservice
(Signatur entfernt; Dieses mal stand hier kein Name)


Quelle: E-Mail vom MDV

Bis zur Antwort hat es etwas länger als eine Woche gedauert:

Sehr geehrter (Name entfernt),

vielen Dank für Ihren Hinweis bzgl. der eingesetzten Kartendienste in unserer App MOOVME.


Wie Sie richtig feststellten, bieten wir als Alternative zu Google Maps OpenStreetMap an. Da OpenStreetMap nur reines Kartenmaterial beinhaltet, ist ein zusätzlicher Dienst zur Navigation und Steuerung der Karten in unserer App notwendig. Wir haben uns für eine für viele Android-Smartphone-Nutzer bekannte und komfortable Steuerung entschieden, die tatsächlich auf einer Anwendung der Google Inc. basiert und per Schnittstelle in die App integriert ist.

Uns ist bewusst, dass die Datenverarbeitung von Google in vielerlei Hinsicht intransparent ist. In Abschnitt 9 der App-Datenschutzerklärung gehen wir auf diesen Umstand ein, müssen aber auch akzeptieren, dass Android von vielen Nutzern das präferierte Betriebssystem ist und der kundenseitige Wunsch besteht, dass viele Funktionalitäten *wie von Android und den Google Apps gewohnt* funktionieren. Wir sehen es als unser berechtigtes Interesse an, den Wünschen und Erwartungen unserer Kunden zu entsprechen und die Funktionalitäten in dieser Form in der Art bereitzustellen.


Wir haben Ihre Hinweise zur Kenntnis genommen und unseren Entwickler angewiesen, die Auswahl der OSM-Karten-Funktionalität als dauerhafte Einstellung, welche auch nach Beendigung der App erhalten bleibt, umzusetzen. Über ein künftiges Update wird dies korrigiert. Hierzu bitten wir noch um etwas Geduld.


Unsere App-Datenschutzerklärung haben wir um die verwendete Google-Schnittstelle präzisiert (https://www.moovme.de/app/datenschutz-de/). Leider können wir hier nicht genauer erklären, inwieweit die Google Inc. die Daten verarbeitet.

Hier können wir nur auf die Angaben von Google verweisen (https://policies.google.com/privacy?hl=de).


Zu Ihrer Frage "Meine andere Frage ist, was dagegen spricht, die Moovme-App unter eine freie Lizenz wie die GPL oder Apache-Lizenz zu setzen und den Quelltext offenzulegen." können wir Ihnen folgende Antwort geben: Der MDV hat die App lediglich in Form einer Lizenz erworben, damit besitzt der MDV kein Recht, den Quelltext offenzulegen.

Bei Interesse können Sie jedoch unsere Daten (Haltestellen, Fahrplandaten, P+R-Plätze) für eigene Anwendungen nutzen, diese finden Sie unter https://www.mdv.de/service/downloads/ ganz unten bei "Open Data".


Wir bedanken uns für Ihr Interesse an unserer App und ebenso für Ihre Hinweise. Wir hoffen, dass Sie weiterhin viel Freude mit MOOVME haben.


Mit freundlichen Grüßen

(Footer entfernt)


Quelle: E-Mail vom MDV

Das wunderschöne berechtigte Interesse …

Wir sehen es als unser berechtigtes Interesse an, den Wünschen und Erwartungen unserer Kunden zu entsprechen


Quelle: Auszug aus der vorherigen E-Mail

Das berechtigte Interesse ist soweit ich es sehe für den Fall, das ein Anbieter etwas ohne Zustimmung des Nutzers machen will. Aber weil es ohne Zustimmung ist muss der Anbieter eine Interessenabwägung durchführen, wodurch man bei diesem Verarbeitungsgrund einen Mehraufwand hat, sofern man wirklich eine Interessenabwägung durchführt und nicht nur einfach “berechtigtes Interesse” sagt. Aber wenn der Nutzer es (wirklich) will, dann kann man einfach die Zustimmung des Nutzers einsetzen.

Das Erwerben als Lizenz klingt natürlich schöner als meine Formulierung mit dem Baukasten, aber es hat die gleiche Bedeutung: Man hat etwas eingekauft. Das gilt für den Support (als Teil vom Marketing und Vertrieb), den Betrieb und die Entwicklung. Die Frage ist, wo der MDV hierbei eigene Kompetenzen aufgebaut hat. Dann kommt die These auf, das hier eine “Digitalisierung durch Einkauf” durchgeführt wurde. Ob so etwas einem Unternehmen langfristig hilft?

Da ja scheinbar auch der Support ausgelagert ist spare ich mir eine Frage dazu in meiner Antwort:

Sehr geehrte (Name entfernt),

die zügige Anpassung der Datenschutzerklärung muss ich loben. Es gibt allerdings eine Lösung, von der ich noch mehr halten würde: Es gibt zur Kartendarstellung unter Android auch die freie Komponente osmdroid, deren Lizenz auch die Nutzung in unfreien Anwendungen ermöglicht. Diese könnte anstelle des Google-Map-Views verwendet werden, wenn der Nutzer die Darstellung per OpenStreetMap wählt. Dann sollten die Anfragen an das Google-Maps-Backend verschwinden. Es würde mich freuen, wenn Sie/ der Lizenzgeber diese Lösung in Betracht ziehen würden.

Brauchen Sie ein berechtigtes Interesse, wenn die Nutzer es wollen? In so einem Fall gibt es auch die Datenverarbeitung aufgrund der Zustimmung der Betroffenen. Mir würde da die Lösung gefallen, das ich vor dem ersten Aufruf der Karte wählen kann, welchen Anbieter ich möchte. Das wäre dann sogar ein informiertes Einverständnis.


Danke für Ihre Antwort und mit freundlichen Grüßen

(Name entfernt)


Quelle: E-Mail an den MDV

Bis zur Antwort hat es dann zwei Tage gebraucht:

Sehr geehrter (Name entfernt),

vielen Dank für die Geduld.


Wir bedanken uns für ihren konstruktiven Hinweis auf "osmdroid". Wir werden diesen Lösungsansatz durch den Hersteller mit prüfen und den technischen Aufwand bewerten lassen.

Auch werden wir intern weitere Alternativen zur Verbesserung des IST-Standes prüfen und diskutieren. Wir haben das Ziel unsere App stetig zu verbessern, auch in Fragen des Datenschutzes.


Vielen Dank für Ihre Bemühungen.


Mit freundlichen Grüßen

MOOVME-Kundenservice

(Footer ohne Name entfernt)


Quelle: E-Mail vom MDV

Warum habe ich das Gefühl, dass das Textbausteine sind?

Aber es ist zumindest etwas passiert und das auch recht zügig, das ist ja leider nicht selbstverständlich:

Alternativ können Sie im Einstellungsbereich der App auf die Open Street Map (OSM)-Karte ausweichen. [...] Zur Navigation und zur Steuerung der OSM-Karten in der App wird ebenso eine Lösung der Google Inc. genutzt, die über eine Schnittstelle von Google integriert ist. Uns ist es leider auch hier nicht möglich, genauere Angaben über die übermittelten Daten bereitzustellen (s.o.).


Interessant ist, das zu diesem Zeitpunkt am Ende der Datenschutzerklärung als Stand noch der 30.06.2020 stand. Dabei gibt es noch eine andere Version, auch mit dem Stand vom 30.06.2020:

Wenn Sie nicht möchten, dass Google mittels der MOOVME-App Daten über Sie verarbeitet, können Sie im Einstellungsbereich der App auf die Open Street Map (OSM) Karte ausweichen. OSM wird von eigenen Servern unseres Auftragsverarbeiters, der HaCon Ingenieursgsellschaft mbH, zur Verfügung gestellt.


Wenn bei (kleinen) Änderungen der Stand nicht angepasst wird, dann hat der … einen begrenzten Nutzen.

Und nun steht es zwar in der Datenschutzerklärung, aber welche Minderheit ruft die überhaupt auf?

Die Existenz der OSM-Option an sich ist auch interessant gewesen: Warum baut man so etwas ein? Wenn man nach der älteren Version der Datenschutzerklärung geht handelt es sich dabei um ein Datenschutz-Feature. Aber scheinbar wurde das entweder nicht kritisch getestet oder die Information, dass das nicht die Anfragen an das Google-Maps-Backend abschaltet, ist irgendwo auf dem Weg vom Entwickler(team) zum Datenschutzerklärungsschreibenden verloren gegangen. Falls die Information verloren gegangen ist, ist die Frage, ob das dem Kunden (dem MDV) bewusst nicht gesagt wurde oder ob das irgendwo anders untergegangen ist. Und falls es nicht getestet wurde, ob die Datenschutzfunktion funktioniert, ist … bei der Organisation der Entwicklungsabteilung und bei der Organisation vom MDV eine Möglichkeit zur Verbesserung vorhanden - Ich teste zwar selbst auch nicht das Netzwerkverbindungsverhalten meiner eigenen Anwendungen, aber ich integriere auch kein Google Maps.

Warum ein professioneller Dienstleister für den Support keine automatischen Eingangsbestätigungen versendet, verstehe ich nicht. Es gibt eine (extreme Minderheit), die in der App-Download-Plattform von Google fünf Minuten nach dem Senden einer Supportanfrage eine schlechte Bewertung mit dem Inhalt “Support nicht erreichbar” hinterlässt, wenn noch keine Antwort gekommen ist. Das ist natürlich ein Extremfall, aber bei mehreren Tagen Bearbeitungszeit wäre eine Eingangsbestätigung mit einer Schätzung der Bearbeitungszeit schon sinnvoll.

Mehr habe ich hier zum Zeitpunkt der Veröffentlichung nicht gehört, aber zwischen dem Eingang dieser Nachricht und der Veröffentlichung lag auch kein langer Zeitraum.

Offen ist noch die Frage, warum der Lieferant gewechselt wurde. Die offizielle Version war ja die Erforderlichkeit einer Überarbeitung. Das interpretiere ich als Unzufriedenheit mit dem Lieferanten. Aber wäre es dann nicht besser gewesen, selbst Kompetenzen aufzubauen anstatt den Lieferanten zu wechseln. Kompetenzen aufbauen und selbst entwickeln darf man hier natürlich nicht gleich setzen, aber das scheinbare aussourcen von fast allen Aspekten von Moovme halte ich nicht für eine gute Lösung.

Eine andere offene Frage ist, ob den Menschen, die die Förderung bewilligt haben, bewusst war, dass die Anwendung weitestgehend schon vorhanden war und nur von einem Unternehmen aus einem anderen Bundesland eingekauft wird.

Da es offene Fragen sind habe ich darauf an dieser Stelle keine Antwort.