디스패치 - iOS SDK

이 문서에서는 iOS v3용 Google 애널리틱스 SDK를 사용하여 Google 애널리틱스로 데이터 전달을 관리하는 방법을 설명합니다.

개요

iOS용 Google 애널리틱스 SDK를 사용하여 수집된 데이터는 로컬에 저장된 후 Google 애널리틱스에 별도의 스레드로 전달됩니다.

데이터는 다음 날 오전 4시(각 보기의 현지 시간대)까지 전달 및 수신되어야 합니다. 이보다 늦게 수신되는 데이터는 보고서에 표시되지 않습니다. 예를 들어 조회가 오후 11시 59분에 로컬로 대기열에 추가된 경우 4시간 이내(오전 3시 59분)까지 전달되어야 보고서에 표시됩니다. 반면 오전 12시에 큐에 추가된 조회는 28시간 이내에 전달되어야 합니다. 즉, 오전 3시 59분으로 설정해야 보고서에 표시됩니다.

주기적인 디스패치

기본적으로 데이터는 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 메서드는 완료 블록을 매개변수로 취하고 하나 이상의 Google 애널리틱스 비콘이 포함된 요청이 완료될 때마다 완료 블록을 호출합니다. 전송할 데이터가 더 있는지 또는 마지막 요청이 성공했는지를 나타내는 결과를 반환합니다. 이 메서드를 사용하면 앱이 백그라운드로 전환될 때 비콘 전송을 효과적으로 관리할 수 있습니다.

applicationDidEnterBackground 메서드 재정의

앱이 백그라운드로 전환될 때 조회를 전송하는 sendHitsInBackground 메서드를 호출하도록 AppDelegate 클래스의 applicationDidEnterBackground 메서드를 재정의합니다.

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