Screen View — συμβάν κινητής αναλυτικής που καταγράφει το άνοιγμα κάθε οθόνης στην εφαρμογή. Είναι το ανάλογο του page_view για τον ιστό, προσαρμοσμένο στο μοντέλο πλοήγησης των κινητών διεπαφών. Σύμφωνα με δεδομένα του Amplitude, 2024, το Screen View είναι το πιο συχνό συμβάν στην αναλυτική εφαρμογών, αποτελώντας έως και το 40% όλων των αποστελλόμενων συμβάντων. Η σωστή υλοποίηση του screen tracking αποτελεί τη βάση για την ανάλυση των διαδρομών χρήστη και των διοχετεύσεων.
Κύρια Σημεία
Screen View — συμβάν αναλυτικής που αποστέλλεται κατά το άνοιγμα οθόνης κινητής εφαρμογής. Το συμβάν περιέχει το όνομα οθόνης (screen_name), την κλάση (screen_class) και τη χρονική σφραγίδα. Σε αντίθεση με την αναλυτική ιστού, όπου το page_view συνδέεται με URL, στις κινητές εφαρμογές οι οθόνες αναγνωρίζονται με βάση το όνομα Activity, Fragment, ViewController ή Custom View.
| Παράμετρος | Τύπος | Παράδειγμα |
|---|---|---|
| screen_name | String | "Product Details" |
| screen_class | String | "ProductDetailActivity" |
| previous_screen | String | "CatalogScreen" |
| timestamp | Long | 1719876543000 |
| duration_sec | Int | 45 |
Η παράμετρος previous_screen είναι ιδιαίτερα σημαντική: επιτρέπει την ανακατασκευή της ακολουθίας μεταβάσεων και τη δημιουργία Screen Flow — χάρτη διαδρομών χρήστη στην εφαρμογή.
Screen View και Page View λύνουν την ίδια εργασία — καταγραφή προβολής — αλλά σε διαφορετικά περιβάλλοντα. Στον ιστό, το URL αναγνωρίζει μοναδικά τη σελίδα και το Page View συνδέεται με τη φόρτωση του εγγράφου. Στις κινητές εφαρμογές, η οθόνη είναι μια κατάσταση UI, που δεν αντιστοιχεί απαραίτητα σε ξεχωριστή διεύθυνση.
Μια άλλη διαφορά — το βάθος περιβάλλοντος. Το Screen View στην κινητή εφαρμογή περιλαμβάνει παραμέτρους κατάστασης: αν ο χρήστης είναι συνδεδεμένος, ποια δεδομένα έχουν φορτωθεί, αν η οθόνη είναι ανοιχτή σε λειτουργία επεξεργασίας. Το Page View στον ιστό σπάνια φέρει τέτοιο περιβάλλον — καταγράφει μόνο το γεγονός φόρτωσης URL. Αυτό καθιστά το Screen View πιο πληροφοριακό για την αναλυτική προϊόντος, καθώς κάθε συμβάν μπορεί να τμηματοποιηθεί ανά κατάσταση.
Πρώτο λάθος — αποστολή screen_view σε κάθε αλλαγή κατάστασης εντός οθόνης (εναλλαγή καρτελών, άνοιγμα αναδυόμενου παραθύρου). Το Screen View πρέπει να καταγράφει μόνο την πλήρη μετάβαση σε νέα οθόνη, όχι μικρο-αλληλεπιδράσεις.
Δεύτερο λάθος — χρήση τεχνικού ονόματος κλάσης αντί για αναγνώσιμο όνομα. Το „ProductDetailActivityKt” είναι άχρηστο για τον αναλυτή — χρησιμοποιήστε „Product Details” στο screen_name.
Τρίτο λάθος — αποστολή screen_view χωρίς τα αντίστοιχα πεδία. Το κενό screen_name δημιουργεί ένα σύνολο άχρηστων εγγραφών που δεν μπορούν να ομαδοποιηθούν. Στέλνετε πάντα τουλάχιστον screen_name και screen_class, ακόμη και σε δοκιμαστικές οθόνες.
Υλοποίηση της παρακολούθησης Screen View εξαρτάται από την αρχιτεκτονική πλοήγησης. Ας εξετάσουμε τις αυτόματες και χειροκίνητες προσεγγίσεις στο παράδειγμα των Jetpack Compose και SwiftUI.
Χρησιμοποιήστε LifecycleEventObserver σε επίπεδο NavigationComponent. Κάθε φορά που ο χρήστης μεταβαίνει σε μια νέα διαδρομή, ενεργοποιείται το συμβάν screen_view.
class ScreenTrackingObserver(
private val analytics: AnalyticsProvider
) : LifecycleEventObserver {
override fun onStateChanged(
source: LifecycleOwner,
event: Lifecycle.Event
) {
if (event == Lifecycle.Event.ON_RESUME) {
val route = source.getRouteFromLifecycleOwner()
analytics.logScreenView(
screenName = route.screenName,
screenClass = source.getLocalClassName()
)
}
}
}
// Σύνδεση στο NavHost
fun NavBackStackEntry.trackScreenView(analytics: AnalyticsProvider) {
lifecycle.addObserver(ScreenTrackingObserver(analytics))
}
Η προσέγγιση εγγυάται ότι το screen_view αποστέλλεται σε κάθε επιστροφή της οθόνης στο προσκήνιο, συμπεριλαμβανομένης της επιστροφής από το παρασκήνιο. Lifecycle.Event.ON_RESUME είναι η σωστή στιγμή για παρακολούθηση, όχι ON_START ή ON_CREATE.
Στο SwiftUI χρησιμοποιείται ο τροποποιητής onAppear που είναι ενσωματωμένος σε κάθε View. Για αυτοματοποίηση δημιουργείται ένα ViewModifier.
struct ScreenTrackingModifier: ViewModifier {
let screenName: String
func body(content: Content) -> some View {
content.onAppear {
Analytics.shared().logScreenView(
name: screenName,
className: "\(Self.self)"
)
}
}
}
extension View {
func trackScreen(_ name: String) -> some View {
modifier(ScreenTrackingModifier(screenName: name))
}
}
// Χρήση:
ProductDetailView()
.trackScreen("Product Details")
Ο τροποποιητής trackScreen προστίθεται σε οποιοδήποτε View με μία γραμμή. Αυτή είναι μια καθαρή και κλιμακούμενη λύση για έργα SwiftUI.
Σε έργα με αρθρωτή αρχιτεκτονική, κάθε άρθρωμα μπορεί να χρησιμοποιεί τη δική του ονομασία οθονών, οδηγώντας σε διπλασιασμό του screen_name. Ένα συγκεντρωτικό enum ScreenName λύνει το πρόβλημα — όλες οι οθόνες ονομάζονται σύμφωνα με ένα ενιαίο πρότυπο σε ένα μέρος. Η προσθήκη νέας οθόνης απαιτεί μόνο μια νέα σταθερά στο enum, όχι αναζήτηση σε ολόκληρο τον κώδικα.
Χρησιμοποιήστε sealed class για την περιγραφή του screen_name με ομαδοποίηση ανά λειτουργία: ProfileScreen.CHANGE_PASSWORD, OrdersScreen.ORDER_HISTORY, CatalogScreen.SEARCH_RESULTS. Αυτό απλοποιεί το φιλτράρισμα στις αναλυτικές αναφορές.
Screen Flow (ή Path Analysis) — οπτικοποίηση της ακολουθίας οθονών που διασχίζει ο χρήστης. Είναι το κύριο εργαλείο για τον εντοπισμό σημείων συμφόρησης στην πλοήγηση.
Κάθε Screen View με παράμετρο previous_screen δημιουργεί μια ακμή γράφου: CatalogScreen → ProductDetails → CartScreen. Συγκεντρώνοντας όλες τις μεταβάσεις, δημιουργείται ο χάρτης διαδρομών. Η διοχέτευση τριών βημάτων βασισμένη στο Screen Flow δείχνει πού εγκαταλείπουν οι χρήστες.
Σύμφωνα με δεδομένα της Mixpanel (2024), η ανάλυση Screen Flow αποκαλύπτει έως και το 40% των προβλημάτων UX που δεν είναι ορατά κατά την ανάλυση μεμονωμένων συμβάντων. Για παράδειγμα, η συχνή μετάβαση ProductDetails → HomeScreen χωρίς αγορά υποδεικνύει πρόβλημα με την τιμή ή την περιγραφή του προϊόντος.
Drop-off — το σημείο όπου ο χρήστης εγκαταλείπει το σενάριο. Αν μετά την οθόνη φόρτωσης το 60% των χρηστών φεύγει, το πρόβλημα είναι στην ταχύτητα φόρτωσης ή στην κίνηση. Αν μετά το Paywall — στην τιμή ή την αξία της συνδρομής.
Firebase δεν παρέχει έτοιμη αναφορά Screen Flow, αλλά τα δεδομένα screen_view είναι διαθέσιμα στο BigQuery. Δημιουργήστε ένα ερώτημα που ομαδοποιεί τις μεταβάσεις ανά ζεύγος (previous_screen, screen_name) και υπολογίζει τη συχνότητα. Το αποτέλεσμα είναι ένας πίνακας μεταβάσεων που μπορεί να οπτικοποιηθεί στο Looker Studio ως διάγραμμα Sankey.
Συμπληρώστε το Screen Flow με τμηματοποίηση: ξεχωριστά για νέους χρήστες (πρώτες 7 ημέρες) και για επιστρέφοντες. Οι νέοι χρήστες κολλάνε συχνότερα σε οθόνες εισαγωγής, οι έμπειροι φτάνουν γρηγορότερα σε ενέργειες-στόχους. Η σύγκριση δύο ροών αποκαλύπτει σημεία συμφόρησης προσαρμογής.
Επιλογή εργαλείου για Screen View εξαρτάται από τον προϋπολογισμό, την τεχνολογική στοίβα και την απαιτούμενη λεπτομέρεια. Ας εξετάσουμε τρεις δημοφιλείς λύσεις.
Firebase παρακολουθεί αυτόματα οθόνες μέσω της παραμέτρου screen_view σε κάθε συμβάν. Δεν απαιτεί επιπλέον κώδικα μετά την ενσωμάτωση SDK. Περιορισμός: το screen_name δημιουργείται από το Activity/ViewController, το οποίο δεν δίνει πάντα αναγνώσιμα ονόματα.
Amplitude προσφέρει ενσωματωμένο Pathfinder — οπτικό κατασκευαστή Screen Flow. Υποστηρίζει user property και τμηματοποίηση ανά ομάδες. Επιτρέπει τη μετονομασία οθονών από την πλευρά του διακομιστή χωρίς αλλαγές στον κώδικα της εφαρμογής.
Mixpanel παρέχει αναφορά Flows σε πραγματικό χρόνο. Μπορεί να δείξει όχι μόνο γραμμικές μεταβάσεις, αλλά και διακλαδώσεις — ποιες οθόνες επισκέπτονται μετά από μια συγκεκριμένη οθόνη. Ενσωματώνεται με SDK iOS, Android, Flutter και React Native.
Κάθε συμβάν screen_view είναι μια δικτυακή αποστολή δεδομένων. Αν η εφαρμογή στέλνει screen_view σε κάθε εναλλαγή καρτέλας (20+ ανά λεπτό), δημιουργεί πρόσθετο φορτίο. Βελτιστοποίηση: αποθηκεύστε προσωρινά το screen_view και στείλτε μαζικά κάθε 5 δευτερόλεπτα. Το Firebase συγκεντρώνει αυτόματα τα συμβάντα, αλλά τα προσαρμοσμένα SDK μπορεί να στέλνουν κάθε κλήση αμέσως.
Μετρήστε το υπερφόρτωμα της παρακολούθησης: προσθέστε χρονική σφραγίδα σε κάθε screen_view και υπολογίστε την καθυστέρηση από το onResume έως την αποστολή. Αν η καθυστέρηση υπερβαίνει τα 100 ms, η παρακολούθηση επηρεάζει το UX. Χρησιμοποιήστε νήμα παρασκηνίου για αποστολή για να μην μπλοκάρετε το νήμα UI. Σε συσκευές χαμηλού επιπέδου, η διαφορά είναι αισθητή.
Συχνές Ερωτήσεις
Ναι, κάθε τμήμα με δικό του περιεχόμενο είναι ξεχωριστή οθόνη. Ένα TabLayout με τρεις καρτέλες πρέπει να στέλνει τρία διαφορετικά screen_view κατά την εναλλαγή. Εξαίρεση: αναδυόμενες καρτέλες χωρίς ανεξάρτητη πλοήγηση.
screen_class — το τεχνικό όνομα της κλάσης (π.χ. „MainActivity”), χρησιμοποιείται από προγραμματιστές. screen_name — αναγνώσιμο όνομα („Κύρια οθόνη”), χρησιμοποιείται σε αναφορές. Το SDK συχνά συμπληρώνει αυτόματα το screen_class, το screen_name πρέπει να οριστεί χειροκίνητα.
Κατά την περιστροφή, η συσκευή αναδημιουργεί το Activity, προκαλώντας επαναλαμβανόμενο screen_view. Χρησιμοποιήστε έλεγχο κατάστασης: στείλτε το συμβάν μόνο όταν αλλάζει η οθόνη, όχι σε κάθε ON_RESUME. Το Firebase και το Amplitude αφαιρούν αυτόματα διπλότυπα screen_view.
Για μια μέση εφαρμογή — 10–30 screen_view ανά χρήστη την ημέρα. Εφαρμογές ειδήσεων: 15–20. Παιχνίδια: 20–40. Βοηθητικά προγράμματα: 5–10. Αν ο αριθμός υπερβαίνει τα 100, ελέγξτε αν οι οθόνες αποστέλλονται σε κάθε πάτημα, όχι σε πλήρη μετάβαση.
Ναι, το screen_view είναι ένας από τους δείκτες σε A/B δοκιμές. Συγκρίνετε τον αριθμό προβολών οθόνης μεταξύ των παραλλαγών A και B. Αν η παραλλαγή B της οθόνης „Checkout” λαμβάνει 15% λιγότερα screen_view, αυτό είναι σήμα προβλήματος στην κάρτα προϊόντος.
Σύνοψη
Θα αναπτύξουμε μια εφαρμογή για κινητά έτοιμη για χρήση
Η IT Sectr δημιουργεί εφαρμογές iOS και Android για νεοφυείς επιχειρήσεις και επιχειρήσεις από το 2017. Θα σας συμβουλεύσουμε και θα προτείνουμε την καλύτερη λύση.
Διαβάστε επίσης