ディスパッチ - iOS SDK

このドキュメントでは、iOS 向け Google アナリティクス SDK v3 を使って、Google アナリティクスへのデータのディスパッチを管理する方法を説明します。

概要

iOS 向け Google アナリティクス SDK を使って収集されたデータは、 別のスレッドで Google アナリティクスにディスパッチされるまでローカルに保存されます。

データのディスパッチと受け取りは、各ビューのローカル タイムゾーンで翌日の午前 4 時 までに行う必要があります。それ以降に受信された データはレポートに表示されません。たとえば、午後 11 時 59 分にローカルなキューに送られたヒットをレポートに表示するには、4 時間以内(午前 3 時 59 分まで)にディスパッチする必要があります。一方、午前 0 時にキューに入れられたヒットは、28 時間以内にディスパッチする必要があります。つまり、有効にする必要があります。

定期的なディスパッチ

iOS 向け Google アナリティクス SDK では、デフォルトで 2 分おきにデータがディスパッチされます。

// Set the dispatch interval in seconds.
// 2 minutes (120 seconds) is the default value.
[GAI sharedInstance].dispatchInterval = 120;

負の値を設定すると定期的なディスパッチが無効となり、Google アナリティクスにデータを送るには手動によるディスパッチが必要になります。

// Disable periodic dispatch by setting dispatch interval to a value less than 1.
[GAI sharedInstance].dispatchInterval = 0;

ディスパッチを待つヒットが残っている間に、ネットワーク接続が切れたり、ユーザーがアプリを終了したりした場合、残りのヒットはローカル ストレージで保持され、次にアプリが起動するか、ディスパッチが呼び出されたときにディスパッチされます。

手動によるディスパッチ

ヒットを手動でディスパッチする方法は次のとおりです。手動によるディスパッチは、対象デバイスの無線が既に別のデータの送信に使われているとわかっている場合などに使用します。

[[GAI sharedInstance] dispatch];

バックグラウンドでのディスパッチ

iOS アプリでバックグラウンドでのディスパッチを有効にする方法は次のとおりです。

dispatchHandler のプロパティを追加する

AppDelegate クラスの実装ファイル(AppDelegate.m)で、@implementation AppDelegate の前に次のプロパティを追加します。

@interface AppDelegate ()
@property(nonatomic, copy) void (^dispatchHandler)(GAIDispatchResult result);
@end

@implementation AppDelegate
// ...

sendHitsInBackground メソッドを実装する

AppDelegate クラスで、アプリがバックグラウンドに移行したときにヒットを送信するように sendHitsInBackground メソッドを実装します。

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

dispatchWithCompletionHandler メソッドは、完了ブロックをパラメータとして受け取り、1 つ以上の Google アナリティクス ビーコンを含むリクエストが完了するたびに、その完了ブロックを呼び出します。送信するデータが他にもあるかどうか、最後のリクエストが成功したかどうかを示す結果が返されます。このメソッドを使用することで、アプリがバックグラウンドに移行するタイミングで、効率的にビーコンをディスパッチできます。

applicationDidEnterBackground メソッドをオーバーライドする

AppDelegate クラスの applicationDidEnterBackground メソッドをオーバーライドして、sendHitsInBackground メソッドを呼び出します。このメソッドは、アプリがバックグラウンドに移行したときにヒットを送信します。

- (void)applicationDidEnterBackground:(UIApplication *)application {
  [self sendHitsInBackground];
}

applicationWillEnterForeground メソッドをオーバーライドする

AppDelegate クラスの applicationWillEnterForeground メソッドをオーバーライドして、ディスパッチ間隔を復元します。次に例を示します。

- (void)applicationWillEnterForeground:(UIApplication *)application {
  // Restores the dispatch interval because dispatchWithCompletionHandler
  // has disabled automatic dispatching.
  [GAI sharedInstance].dispatchInterval = 120;
}