Questo documento descrive come puoi gestire l'invio dei dati a Google Analytics utilizzando l'SDK di Google Analytics per iOS v3.
Panoramica
I dati raccolti con l'SDK di Google Analytics per iOS vengono archiviati in locale prima di essere inviati a Google Analytics in un thread separato.
I dati devono essere inviati e ricevuti entro le 04:00 del giorno successivo, nel fuso orario locale di ogni vista. Tutti i dati ricevuti in un secondo momento non verranno visualizzati nei report. Ad esempio, se un hit viene inserito in coda localmente alle 23:59, deve essere inviato entro 4 ore, entro le 03:59, per essere visualizzato nei report. Un hit, invece, in coda alle 00:00 deve essere inviato entro 28 ore, ovvero alle 03:59 del giorno successivo, per comparire nei report.
Spedizione periodica
Per impostazione predefinita, i dati vengono inviati dall'SDK Google Analytics per iOS ogni 2 minuti.
// Set the dispatch interval in seconds. // 2 minutes (120 seconds) is the default value. [GAI sharedInstance].dispatchInterval = 120;
L'impostazione di un valore negativo comporta la disattivazione dell'invio periodico, che richiede l'invio manuale se vuoi inviare dati a Google Analytics.
// Disable periodic dispatch by setting dispatch interval to a value less than 1. [GAI sharedInstance].dispatchInterval = 0;
Se un utente perde l'accesso alla rete o chiude l'app mentre sono ancora presenti hit in attesa di invio, questi hit vengono mantenuti nello spazio di archiviazione locale. Verranno inviati alla successiva esecuzione dell'app e alla chiamata dell'invio.
Spedizione manuale
Per inviare manualmente gli hit, ad esempio quando sai che la radio del dispositivo viene già utilizzata per inviare altri dati:
[[GAI sharedInstance] dispatch];
Invio in background
Per attivare l'invio in background sulle app per iOS:
- Aggiungi una proprietà per
dispatchHandler
. - Implementa il metodo
sendHitsInBackground
. -
Esegui l'override del metodo
applicationDidEnterBackground
. - Esegui l'override del metodo
applicationWillEnterForeground
.
Aggiungi una proprietà per dispatchHandler
Nel file di implementazione (AppDelegate.m
) della
classe AppDelegate
, aggiungi la seguente proprietà prima
@implementation AppDelegate
:
@interface AppDelegate () @property(nonatomic, copy) void (^dispatchHandler)(GAIDispatchResult result); @end @implementation AppDelegate // ...
Implementa il metodo sendHitsInBackground
Nella classe AppDelegate
, implementa il metodo sendHitsInBackground
per inviare hit quando l'app va in background:
// This method sends any queued hits when the app enters the background. - (void)sendHitsInBackground { __block BOOL taskExpired = NO; __block UIBackgroundTaskIdentifier taskId = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{ taskExpired = YES; }]; if (taskId == UIBackgroundTaskInvalid) { return; } __weak AppDelegate *weakSelf = self; self.dispatchHandler = ^(GAIDispatchResult result) { // Send hits until no hits are left, a dispatch error occurs, or // the background task expires. if (result == kGAIDispatchGood && !taskExpired) { [[GAI sharedInstance] dispatchWithCompletionHandler:weakSelf.dispatchHandler]; } else { [[UIApplication sharedApplication] endBackgroundTask:taskId]; } }; [[GAI sharedInstance] dispatchWithCompletionHandler:self.dispatchHandler]; }
Il metodo dispatchWithCompletionHandler
prende un blocco
di completamento come parametro e chiama questo blocco di completamento ogni volta che viene completata una richiesta
contenente uno o più beacon di Google Analytics.
Restituisce un risultato che indica se ci sono altri dati da inviare e/o se l'ultima richiesta è andata a buon fine. Questo metodo consente di gestire l'invio dei beacon in modo efficace quando l'app passa in background.
Esegui l'override del metodo applicationDidEnterBackground
Esegui l'override del metodo applicationDidEnterBackground
nella
classe AppDelegate
per chiamare il metodo sendHitsInBackground
, che invia hit quando l'app passa in background:
- (void)applicationDidEnterBackground:(UIApplication *)application { [self sendHitsInBackground]; }
Esegui l'override del metodo applicationWillEnterForeground
Esegui l'override del metodo applicationWillEnterForeground
nella
classe AppDelegate
per ripristinare l'intervallo di invio. Ad esempio:
- (void)applicationWillEnterForeground:(UIApplication *)application { // Restores the dispatch interval because dispatchWithCompletionHandler // has disabled automatic dispatching. [GAI sharedInstance].dispatchInterval = 120; }