Invio - SDK per iOS

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

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;
}