디스패치 - iOS SDK

이 문서에서는 iOS용 Google 애널리틱스 SDK v3을 사용하여 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 메서드 재정의

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