Implementando il tracciamento di Analytics all'interno di app scritte con il framework Ionic diventa subito evidente il problema relativo al mancato invio della prima View che si presenta all'apertura dell'app, guardiamo quindi il perchè esso accade e come ovviare al problema.
Come descritto nel mio articolo INTEGRARE GOOGLE ANALYTICS IN IONIC PER IL TRACCIAMENTO DI APP IBRIDE l'informazione relativa al Tracking ID della proprietà verso la quale vogliamo inviare i dati di Analytics va inserita in app.js nel momento in cui la piattaforma Ionic è stata caricata ed è pronta all'utilizzo (nel caso specifico Analytics è stato integrato con il plugin cordova-plugin-google-analytics), come mostrato nell'immagine seguente (Fig. 1):
Fig. 1 - Ionic e Google Analytics - Inizializzazione dell'ID di monitoraggio tramite startTrackerWithId
Il tracciamento di ciascuna pagina va poi inserio all'interno di ciscun relativo Controller, come mostrato a titolo esemplificativo nella seguente immagine che mostra il tracciamento di una ipotetica pagina di login (Fig. 2):
Fig. 2 - Ionic e Google Analytics - Tracciamento di schermate tramite trackView
Questa configurazione funziona perfettamente per tutte le schermete ad eccezione della prima, basterà infatti effettuare dei test per rendersi conto che all'avvio dell'app non succede niente su Analytics.
Il problema sta nel fatto che Controller viene eseguito prima di $ionicPlatform.ready. Questo succede perchè $ionicPlatform.ready non indica quando l'app è avviata bensì comunica all'app il momento in cui le API di Cordova sono pronte all'uso, di conseguenza Angular avvierà l'applicazione appena la sua libreria è stata caricata disinteressandosi di attendere il callback da $ionicPlatform.ready.
La situazione in console sarà pertanto la seguente (per informazioni su come effettuare il debug fare riferimento alla mia guida DEBUG DI APPLICAZIONI CORDOVA/PHONEGAP CON CHROME):
Fig. 3 - Ionic e Google Analytics - Tracciamento errato della prima schermata tramite trackView che viene eseguito prima del caricamento del tracking ID
Dove è possibile vedere che l'app prima passa dalla schermata della home (view_home) e successivamente dal codice che inizializza il tracking ID (start analytics), con la conseguenza che l'hit non viene associato all'ID della proprietà e pertanto viene scartato dall'invio.
Per ovviare a questo inconveniente una soluzione funzionante che ho testato personalmente è quella di inserire l'invio della View all'interno di $ionicPlatform.ready che si va quindi ad accodare a quella presente in .run, come nell'immagine seguente (Fig. 4):
Fig. 4 - Ionic e Google Analytics - Tracciamento per la prima schermata tramite trackView
In questo caso pertanto l'invio della View non partirà a vuoto ma attenderà che ci siano le condizioni per cui il tracker venga settato correttamente.
Questo è utile soprattutto in quei casi in cui la prima schermata non è necessariamente sempre la stessa, ad esempio login se non loggato o home se loggato (alternativamente nel caso fosse sempre la stessa il codice di tracciamento della View potrebbe essere inserito sotto a startTrackerWithId oltre che nella View stessa, ma non è proprio una soluzione pulita).
Avviando l'app dopo la modifica effettuata, a differenza della situazione visualizzata in Fig. 3, il risultato sarà il seguente:
Fig. 3 - Ionic e Google Analytics - Tracciamento corretto della prima schermata tramite trackView che viene eseguito subito dopo il caricamento del tracking ID
Dove stavolta è possibile vedere che l'app prima passa dal codice che inizializza il tracking ID (start analytics) e poi dalla schermata della home (view_home). Su Analytics l'hit viene recuperato con successo.
Questo approccio può essere inoltre utilizzato per avviare qualsiasi altro script, non solo il tracciamento di Analytics, all'interno del primo Controller in modo che esso attenda che le altre operazioni, in app.js, vengano effettuate.
Buon tracciamento e per qualsiasi dubbio o perplessità lasciate un commeto qua sotto.
Nessuno ha ancora commentato questo articolo, fallo tu per primo!
Scrivi un Commento