React Native
Nutzerverhalten in React-Native-Apps analysieren
Wie Session Replay in Apps funktioniert, was in React Native und Expo erfasst wird, wie viel Daten entstehen und wie Sie Eingaben und Einwilligung sauber lösen.
Veröffentlicht · Aktualisiert · 5 Min. Lesezeit
Um das Nutzerverhalten in einer React-Native-App zu verstehen, kombinieren Sie am besten eventbasierte App-Analyse mit Session Replay. Events zeigen, wie oft etwas passiert, die Aufzeichnung zeigt, wie es passiert. Für React Native gibt es dabei zwei technische Ansätze: Bildschirmfotos in kurzen Abständen oder die Aufzeichnung der Elementstruktur mit ihren Texten, die deutlich weniger Daten erzeugt.
Wie funktioniert Session Replay in Apps?
Im Web lässt sich das DOM aufzeichnen, also die Struktur, aus der der Browser die Seite zeichnet. In nativen Apps gibt es kein DOM. Anbieter lösen das auf zwei Arten:
| Aspekt | Screenshot-basiert | Struktur- und textbasiert |
|---|---|---|
| Prinzip | Regelmäßige Bilder des Bildschirms | Elementbaum mit Position, Größe und Text |
| Darstellung in der Wiedergabe | Pixelgenaues Abbild | Vereinfachte Nachbildung als Drahtgitter |
| Datenvolumen | Höher, da Bilder übertragen werden | Gering, nur Struktur und Änderungen |
| Maskierung | Bereiche werden im Bild geschwärzt | Texte werden vor dem Senden entfernt |
| Texte durchsuchbar oder übersetzbar | Nein | Ja |
| Natives Modul nötig | Je nach Anbieter | Nicht zwingend |
Das SDK @anyreplay/react-native folgt dem zweiten Ansatz. Es liest den Elementbaum Ihrer App und zeichnet Struktur und Text auf, keine Bildschirmfotos. Es ist reines JavaScript, braucht kein natives Modul und keinen neuen nativen Build. Voraussetzung ist die New Architecture von React Native, die bei aktuellen Projekten Standard ist.
Was wird in React Native erfasst und was nicht?
- Erfasst: Elementtypen, Texte, Position und Größe der Elemente auf dem Bildschirm.
- Erfasst: Berührungen (ein Tippen, wenn der Finger sich hebt; Scrollen und Wischen zählen nicht als Tippen), Scrollpositionen und Bildschirmwechsel; Bildschirmnamen übernimmt das SDK aus dem
NavigationContainervon React Navigation. - Erfasst: Geräteangaben wie Plattform, Betriebssystemversion und Bildschirmgröße; jede Session zeigt, welche Plattform und App-Version sie aufgezeichnet hat.
- Nur teilweise: Bei einer
FlatListerscheinen nur die Zeilen, die zum jeweiligen Zeitpunkt gerendert waren. - Als Platzhalter: Eigene native Komponenten erscheinen als Kästen ohne Inhalt, weil es nichts Lesbares zu erfassen gibt.
- Nicht erfasst: Inhalte von Canvas-Flächen, Karten, Web-Views und Videos; sie erscheinen als beschriftete Kästen.
- Erfasst, solange Sie nicht maskieren: Werte in Eingabefeldern; Zugangs- und Zahlungsfelder bleiben immer verborgen, siehe Abschnitt zum Datenschutz.
Die vollständige Liste finden Sie in der Installationsanleitung für React Native (auf Englisch). Einen Überblick über das SDK gibt die Seite Session Replay für React Native.
Wie stark belastet die Aufzeichnung Performance und Datenvolumen?
Gerade bei Apps ist das eine berechtigte Frage, denn viele Nutzer sind mobil unterwegs. Beim strukturbasierten Ansatz ist der erste Frame eines Bildschirms nur wenige Kilobyte groß. Danach werden ausschließlich Änderungen übertragen, und ein Bildschirm, auf dem sich nichts tut, sendet gar nichts.
Zusätzlich steuern Sie die Menge über zwei Stellschrauben: Mit sampleRate legen Sie fest, welcher Anteil der Nutzer aufgezeichnet wird; die Entscheidung fällt einmal pro Nutzer. Über monatliche Obergrenzen pro Projekt verhindern Sie, dass ein unerwarteter Ansturm Ihr Kontingent aufbraucht. Details stehen in der Dokumentation zum Sampling (auf Englisch).
Beim Beenden oder Wechseln der App gilt eine Besonderheit: Gepufferte Daten werden gesendet, sobald die App in den Hintergrund geht. Beendet das Betriebssystem die App ohne Vorwarnung, können die letzten Sekunden einer Session fehlen. Für die Analyse von Bedienproblemen spielt das in der Regel keine große Rolle.
Wie schützen Sie Eingaben und Einwilligung in der App?
In Apps geben Menschen oft besonders sensible Daten ein: Zugangsdaten, Adressen, Gesundheits- oder Finanzinformationen. Das mobile SDK verhält sich wie das im Browser: maskAllInputs ist standardmäßig true, was jemand in ein TextInput tippt, wird also maskiert, solange Sie nicht maskAllInputs: false setzen. Maskiert wird auf dem Gerät, bevor etwas gesendet wird:
- Standardmäßig ist jedes
TextInputmaskiert,maskAllInputs: falsezeichnet Eingaben auf;maskAllTyping: truemaskiert jedes Feld und lässt sich nicht abschwächen,maskImages: truezeichnet keine Bildadressen auf. - Alles mit
secureTextEntryist in jeder Konfiguration maskiert. - Ebenso Felder, deren
textContentTypeoderautoCompleteein Passwort, einen Einmalcode oder ein Kartenfeld benennt, Felder mitkeyboardType="visible-password", Felder, derenplaceholder,accessibilityLabel,testIDodernativeIDnach Zahlungs- oder Zugangsdaten klingt, jeder Wert aus 13 bis 19 Ziffern, der die Kartenprüfung besteht, und bei einer Kartennummer, die gerade getippt wird, alles nach der sechsten Ziffer. - Elemente, deren
testIDdie Zeichenfolgear-maskenthält, verlieren ihre Texte, behalten aber ihren Kasten.
Die Grenze gehört dazugesagt: Mit maskAllInputs: false wird ein nacktes <TextInput /> ohne Attribute, das nichts über sich selbst sagt, aufgezeichnet — genau wie ein nicht markiertes Feld im Web. Postleitzahlen, E-Mail-Adressen, Telefonnummern und Benutzernamen gehören ebenfalls nicht zum Sockel. Geben Sie sensiblen Feldern ein textContentType, ein autoComplete oder eine testID mit ar-mask — oder bleiben Sie beim Standard. Weil maskierte Werte das Gerät nie verlassen, werden sie auch bei der Übersetzung von Aufzeichnungen nie übertragen. Für die Einwilligung gilt dasselbe Prinzip wie im Web: Mit requireConsent: true zeichnet das SDK nichts auf, bis Ihre App consent(true) aufruft. Die Entscheidung speichern Sie selbst und geben sie bei jedem App-Start weiter. Die rechtlichen Hintergründe beschreibt der Artikel Session Replay und DSGVO; lassen Sie Ihr Setup von Ihrer Datenschutzbeauftragten prüfen.
Worin unterscheidet sich Session Replay von eventbasierter App-Analyse?
| Frage | Eventbasierte App-Analyse | Session Replay |
|---|---|---|
| Was misst es? | Definierte Ereignisse und Kennzahlen | Den tatsächlichen Ablauf einer Nutzung |
| Typische Erkenntnis | Nur ein Teil schließt das Onboarding ab | Der Weiter-Button liegt unter der Tastatur |
| Aufwand | Jedes Event muss geplant und eingebaut werden | Einmal eingebunden, Bildschirme werden automatisch erfasst |
| Blinde Flecken | Alles, was nicht als Event definiert ist | Große Mengen lassen sich nicht aggregiert auswerten |
Beide Ansätze ergänzen sich. In AnyReplay setzen Sie mit track() eigene Events, etwa „Onboarding abgeschlossen“, und filtern die Session-Liste danach. Sessions mit unbehandelten Fehlern werden markiert. Funnel-Berichte oder A/B-Tests bietet AnyReplay nicht; dafür bleibt Ihr Analysewerkzeug zuständig.
Funktioniert das auch mit Expo?
Ja. Weil das SDK kein natives Modul enthält, läuft es ab Expo SDK 52 – mit der New Architecture, die es braucht – in Expo Go ebenso wie in Entwicklungs- und Produktions-Builds, ohne Konfigurations-Plugin und ohne Prebuild. Die Einbindung besteht aus zwei Zeilen App-Code: dem Aufruf von init() und dem Umschließen der App mit <AnyReplay>. Mit Expo Router melden Sie Bildschirmwechsel über screen(). Die Schritte zeigt die Anleitung für Expo (auf Englisch).
Aufzeichnungen aus der App erscheinen in derselben Session-Liste wie Ihre Web-Sessions. Arbeitet Ihr Support in mehreren Ländern, lassen sich die aufgezeichneten Texte auf Abruf ins Deutsche, Englische, Türkische, Spanische oder Französische übersetzen, siehe Session-Übersetzung.
Checkliste für die Einführung in Ihrer App
- Prüfen, ob die App die New Architecture nutzt.
@anyreplay/react-nativeinstallieren,init()einmal auf Modulebene aufrufen und die App mit<AnyReplay>umschließen.- Führt das Projekt erlaubte Domains, die Bundle-ID der App unter Erlaubte Apps eintragen und denselben Wert als
appIdübergeben. - Bildschirmnamen über
NavigationContaineroder bei Expo Router überscreen()melden. requireConsent: truesetzen undconsent(true)an Ihre Einwilligungslösung koppeln.- Entscheiden, ob Eingaben aufgezeichnet werden: beim Standard bleiben oder mit
maskAllInputs: falseaufzeichnen und sensiblen FelderntextContentType,autoCompleteoder einear-mask-testIDgeben. - Sensible Anzeigen außerhalb von Eingabefeldern mit
testIDundar-maskkennzeichnen. - Eigene Komponenten, Listen und Videos in einer Testaufzeichnung prüfen.
sampleRateund monatliche Obergrenzen festlegen.- Wichtige Schritte wie Registrierung oder Kauf mit
track()markieren. - Datenschutzerklärung der App aktualisieren und Speicherdauer festlegen.
Braucht das SDK Zugriff auf die Fotomediathek?
Nein. Aufgezeichnet wird die Elementstruktur der App, nicht der Bildschirminhalt als Bild.
Muss ich die App neu bauen?
Für das SDK selbst nicht, da es kein natives Modul enthält. Die Änderung liefern Sie wie jede andere Änderung am JavaScript-Code Ihrer App aus.