고급 구성 - iOS SDK

이 문서에서는 iOS v3용 Google 애널리틱스 SDK의 고급 구성 기능 중 몇 가지를 간략하게 설명합니다.

개요

iOS용 Google 애널리틱스 SDK는 데이터를 설정하고 Google 애널리틱스로 전송하는 GAITracker 클래스와 구현의 전역 구성 값에 대한 인터페이스 역할을 하는 GAI 싱글톤을 제공합니다.

초기화

데이터를 측정하려면 먼저 추적기의 이름과 Google 애널리틱스 속성 ID를 제공하여 GoogleAnalytics 싱글톤을 통해 하나 이상의 추적기를 초기화해야 합니다.

// Initialize a tracker using a Google Analytics property ID.
[[GAI sharedInstance] trackerWithTrackingId:@"UA-XXXX-Y"];

이제 이 추적기를 사용하여 데이터를 설정하고 Google 애널리틱스로 전송할 수 있습니다.

데이터 설정 및 보내기

추적기에서 매개변수-값 쌍의 맵을 설정하고 setsend 메서드를 통해 전송하여 Google 애널리틱스로 데이터를 전송합니다.

/*
 * Send a screen view to Google Analytics by setting a map of parameter
 * values on the tracker and calling send.
 */

// Retrieve tracker with placeholder property ID.
id<GAITracker> tracker = [[GAI sharedInstance] trackerWithTrackingId:@"UA-XXXX-Y"];

NSDictionary *params = [NSDictionary dictionaryWithObjectsAndKeys:
                            @"appview", kGAIHitType, @"Home Screen", kGAIScreenName, nil];
[tracker send:params];

GAIDictionaryBuilder 클래스는 조회 빌드 프로세스를 간소화하며 대부분의 사용 사례에 권장됩니다. 여기서는 더 적은 코드 줄로 동일한 화면 조회수를 전송할 수 있습니다.

// Previous V3 SDK versions.
// Sending the same screen view hit using [GAIDictionaryBuilder createAppView]
// [tracker send:[[[GAIDictionaryBuilder createAppView] set:@"Home Screen"
//                                                   forKey:kGAIScreenName] build]];

// SDK Version 3.08 and up.
// Sending the same screen view hit using [GAIDictionaryBuilder createScreenView]
[tracker send:[[[GAIDictionaryBuilder createScreenView] set:@"Home Screen"
                                                     forKey:kGAIScreenName] build]];

측정 프로토콜 앰퍼샌드 구문

값이 Builder에 값을 설정하여 단일 조회에 설정되거나, 측정 프로토콜 앰퍼샌드 구문을 사용하여 추적기 객체 자체에서 값을 설정하는 방법으로 모든 후속 조회에서 값을 설정할 수도 있습니다.

// Sending the same screen view hit using ampersand syntax.
// Previous V3 SDK versions.
// [tracker send:[[[GAIDictionaryBuilder createAppView] set:@"Home Screen"
//                                                   forKey:kGAIScreenName] build]];

// SDK Version 3.08 and up.
[tracker send:[[[GAIDictionaryBuilder createScreenView] set:@"Home Screen"
                                                     forKey:kGAIScreenName] build]];

사용 가능한 측정 프로토콜 매개변수의 전체 목록은 측정 프로토콜 매개변수 참조를 참고하세요.

다중 조회에 값 적용

추적기에 직접 설정된 값은 다음 예와 같이 유지되고 여러 조회에 적용됩니다.

// May return nil if a tracker has not yet been initialized with
// a property ID.
id<GAITracker> tracker = [[GAI sharedInstance] defaultTracker];

// Set screen name on the tracker to be sent with all hits.
[tracker set:kGAIScreenName
       value:@"Home Screen"];

// Send a screen view for "Home Screen".
// [tracker send:[[GAIDictionaryBuilder createAppView] build]];   // Previous V3 SDK versions.
[tracker send:[[GAIDictionaryBuilder createScreenView] build]];   // SDK Version 3.08 and up.

// This event will also be sent with &cd=Home%20Screen.
[tracker send:[[GAIDictionaryBuilder createEventWithCategory:@"UX"
                                                      action:@"touch"
                                                       label:@"menuButton"
                                                       value:nil] build]];

// Clear the screen name field when we're done.
[tracker set:kGAIScreenName
       value:nil];

여러 조회에서 유지하려는 값만 추적기에서 직접 설정해야 합니다. 후속 화면 조회수 및 이벤트 조회에 동일한 값이 적용될 수 있으므로 추적기의 화면 이름을 설정하는 것이 합리적입니다. 하지만 추적기에서 조회 유형과 같은 필드를 설정하는 것은 조회가 발생할 때마다 변경될 수 있으므로 권장하지 않습니다.

여러 트래커 사용

단일 구현에서 여러 추적기를 사용할 수 있으며, 이는 여러 속성에 데이터를 전송하는 데 유용할 수 있습니다.

id<GAITracker> t1 = [[GAI sharedInstance] trackerWithTrackingId:@"UA-XXXX-1"];

// Trackers may be named. By default, name is set to the property ID.
id<GAITracker> t2 = [[GAI sharedInstance] trackerWithName:@"altTracker"
                                                     trackingId:@"UA-XXXX-2"];

[t1 set:kGAIScreenName
        value:@"Home Screen"];

[t2 set:kGAIScreenName
        value:NSStringFromClass([self class])];

// Send a screenview to UA-XXXX-1.
// [t1 send:[[GAIDictionaryBuilder createAppView] build]];   // Previous V3 SDK versions.
[t1 send:[[GAIDictionaryBuilder createScreenView] build]];   // SDK Version 3.08 and up.

// Send a screenview to UA-XXXX-2.
// [t2 send:[[GAIDictionaryBuilder createAppView] build]];   // Previous V3 SDK versions.
[t2 send:[[GAIDictionaryBuilder createScreenView] build]];   // SDK Version 3.08 and up.

자동 화면 및 포착되지 않은 예외 측정과 같은 자동 측정 기능은 하나의 추적기만 사용하여 Google 애널리틱스로 데이터를 전송합니다. 이러한 기능을 사용 중이고 다른 추적기를 통해 데이터를 전송하려면 수동으로 전송해야 합니다.

참고로 자동 화면 측정은 지정된 GAITrackedViewControllertracker 속성에 지정된 추적기를 사용합니다. 포착되지 않은 예외 측정은 GAI 인스턴스에 지정된 기본 추적기를 사용합니다.

기본 추적기 사용

Google 애널리틱스에서는 기본 추적기를 유지합니다. 초기화된 첫 번째 추적기가 기본 추적기가 되지만 재정의될 수 있습니다.

// t1 becomes the default tracker because it is the first tracker initialized.
id<GAITracker> t1 = [[GAI sharedInstance] trackerWithTrackingId:@"UA-XXXX-1"];

id<GAITracker> t2 = [[GAI sharedInstance] trackerWithTrackingId:@"UA-XXXX-2"];

// Returns t1.
id<GAITracker> defaultTracker = [[GAI sharedInstance] defaultTracker];

// Hit sent to UA-XXXX-1.
// Previous V3 SDK versions.
// [defaultTracker send:[[[GAIDictionaryBuilder createAppView]
//                 set:@"Home Screen" forKey:kGAIScreenName] build]];

// SDK Version 3.08 and up.
[defaultTracker send:[[[GAIDictionaryBuilder createScreenView]
                set:@"Home Screen" forKey:kGAIScreenName] build]];

// Override the default tracker.
[[GAI sharedInstance] setDefaultTracker:t2];

// Returns t2.
defaultTracker = [[GAI sharedInstance] defaultTracker];

// Hit sent to UA-XXXX-2.
// Previous V3 SDK versions.
// [defaultTracker send:[[[GAIDictionaryBuilder createAppView]
//                        set:NSStringFromClass([self class])
//                     forKey:kGAIScreenName] build]];

// SDK Version 3.08 and up.
[defaultTracker send:[[[GAIDictionaryBuilder createScreenView]
                       set:NSStringFromClass([self class])
                    forKey:kGAIScreenName] build]];

샘플링

클라이언트 측 샘플링을 사용 설정하면 Google 애널리틱스로 전송되는 조회수를 제한할 수 있습니다. 앱에 사용자가 많거나 Google 애널리틱스로 대량의 데이터를 전송하는 경우 샘플링을 사용 설정하면 보고가 중단되지 않습니다.

예를 들어 클라이언트 측 샘플링을 50%의 비율로 구현하려면 다음 코드를 사용합니다.

// Assumes a tracker has already been initialized with a property ID, otherwise
// getDefaultTracker returns nil.
id<GAITracker> tracker = [[GAI sharedInstance] defaultTracker];

// Set a sample rate of 50%.
[tracker set:kGAISampleRate value:@"50.0"];

앱 수준 선택 해제

앱 수준 선택 해제 플래그를 사용 설정하여 앱 전체에서 Google 애널리틱스를 사용 중지할 수 있습니다. 이 플래그는 앱을 시작할 때마다 설정해야 하며 기본값은 NO입니다.

앱 수준의 선택 해제 설정을 가져오려면 다음을 사용합니다.

// Get the app-level opt out preference.
if ([GAI sharedInstance].optOut) {
  ... // Alert the user they have opted out.
}

앱 수준의 선택 해제를 설정하려면 다음을 사용하세요.

// Set the app-level opt out preference.
[[GAI sharedInstance] setOptOut:YES];

클라이언트 측 사용자 데이터 삭제

최종 사용자의 Google 애널리틱스 클라이언트 측 데이터를 재설정하거나 삭제해야 하는 경우 Google 애널리틱스 파일을 삭제하거나 새 클라이언트 ID를 설정할 수 있습니다.

옵션 1: Google 애널리틱스 파일 삭제하기

앱에서 최종 사용자의 클라이언트 ID를 명시적으로 설정하지 않은 경우 클라이언트 ID를 저장하는 데 사용된 Google 애널리틱스 파일을 삭제하여 새 클라이언트 ID를 강제로 생성할 수 있습니다.

다음은 Google 애널리틱스 파일을 삭제하는 데 사용할 수 있는 메서드입니다. Google 애널리틱스를 초기화하기 전에 이 메서드를 실행해야 합니다.

/* Execute this before [GAI sharedInstance] is initialized. */
static void DeleteGAFiles(void) {
  NSArray *paths = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES);
  NSFileManager *fileManager = [NSFileManager defaultManager];
  NSArray *libraryFiles = [fileManager contentsOfDirectoryAtPath:paths.firstObject error:nil];

  NSPredicate *predicate =
      [NSPredicate predicateWithFormat:@"self BEGINSWITH 'googleanalytics'"];
  NSArray *matchingFileNames = [libraryFiles filteredArrayUsingPredicate:predicate];

  for (NSString *fileName in matchingFileNames) {
    NSError *error;
    NSString *filePath = [paths.firstObject stringByAppendingPathComponent:fileName];
    if (![fileManager removeItemAtPath:filePath error:&error]) {
      // Log error.
    }
  }
}

옵션 2: 새 클라이언트 ID 설정

새로운 고유 클라이언트 ID를 생성하고 설정할 수 있습니다. 이후의 모든 조회에서 새 고객 ID를 사용하며 이전 데이터는 새 고객 ID와 연결되지 않습니다.

다음 코드를 실행하여 새 클라이언트 ID를 생성하고 설정합니다.

[GAI sharedInstance].optOut = YES;

// This Id should be a valid UUID (version 4) string as described in https://goo.gl/0dlrGx.
NSString *newClientID = [NSUUID UUID].UUIDString.lowercaseString;
id dispatcher = [[GAI sharedInstance] performSelector:@selector(dispatcher)];
id dataStore = [dispatcher performSelector:@selector(dataStore)];
if ([dataStore respondsToSelector:@selector(setClientId:)]) {
  [dataStore performSelector:@selector(setClientId:) withObject:newClientID];
}

[GAI sharedInstance].optOut = NO;

IP 익명 처리

IP 익명처리 기능을 사용 설정하면 Google 애널리틱스에 저장 전에 IP 주소의 마지막 옥텟을 삭제하여 SDK에서 전송한 IP 정보를 익명처리합니다.

다음 예에서는 추적기의 IP 익명처리 기능을 enable하는 방법을 보여줍니다.

[tracker set:kGAIAnonymizeIp value:@"1"];

IP 익명처리 기능은 언제든지 설정할 수 있습니다.

테스트 및 디버깅

iOS용 Google 애널리틱스 SDK는 더 쉽게 테스트하고 디버깅할 수 있는 도구를 제공합니다.

테스트 실행

SDK는 설정된 경우 데이터가 Google 애널리틱스로 전송되지 않도록 하는 dryRun 플래그를 제공합니다. dryRun 플래그는 구현을 테스트하거나 디버깅할 때마다 설정해야 하고 테스트 데이터가 Google 애널리틱스 보고서에 표시되지 않도록 해야 합니다.

테스트 실행 플래그를 설정하려면 다음 안내를 따르세요.

[[GAI sharedInstance] setDryRun:YES];

Logger

GAILogger 프로토콜은 error, warning, info, verbose의 상세 수준으로 SDK의 유용한 메시지를 처리하기 위해 제공됩니다.

SDK는 표준 Logger 구현을 초기화하며 기본적으로 콘솔에 경고 또는 오류 메시지만 로깅합니다. Logger의 상세 출력을 설정하려면 다음 안내를 따르세요.

// Set the log level to verbose.
[[GAI sharedInstance].logger setLogLevel:kGAILogLevelVerbose];

Logger의 맞춤 구현을 사용할 수도 있습니다.

// Provide a custom logger.
[[GAI sharedInstance].logger = [[CustomLogger alloc] init];

전체 예

아래 예는 Google 애널리틱스 구현을 초기화하고 단일 화면 조회수를 전송하는 데 필요한 코드를 보여줍니다.

다음으로 화면 조회수는 첫 번째 화면이 사용자에게 표시될 때 측정됩니다.

일반적으로 구현 초기화는 다음 예와 같이 앱 대리자에서 실행할 수 있습니다.

//
//  AppDelegate.h
//
#import <UIKit/UIKit.h>
#import "GAI.h"

@interface AppDelegate : UIResponder <UIApplicationDelegate>

@property (strong, nonatomic) UIWindow *window;
@property (strong, nonatomic) id<GAITracker> tracker;

@end

//
//  AppDelegate.m
//
#import "AppDelegate.h"

/** Google Analytics configuration constants **/
static NSString *const kGaPropertyId = @"UA-XXXX-Y"; // Placeholder property ID.
static NSString *const kTrackingPreferenceKey = @"allowTracking";
static BOOL const kGaDryRun = NO;
static int const kGaDispatchPeriod = 30;

@interface AppDelegate ()

- (void)initializeGoogleAnalytics;

@end

@implementation AppDelegate
- (void)applicationDidBecomeActive:(UIApplication *)application {
    [GAI sharedInstance].optOut =
    ![[NSUserDefaults standardUserDefaults] boolForKey:kTrackingPreferenceKey];
}

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Do other work for customization after application launch
    // then initialize Google Analytics.
    [self initializeGoogleAnalytics];

    return YES;
}

- (void)initializeGoogleAnalytics {

    [[GAI sharedInstance] setDispatchInterval:kGaDispatchPeriod];
    [[GAI sharedInstance] setDryRun:kGaDryRun];
    self.tracker = [[GAI sharedInstance] trackerWithTrackingId:kGaPropertyId];
}

// The rest of the app delegate code omitted.

@end

그런 다음 사용자에게 조회가 표시될 때 화면 조회수를 측정하는 방법은 다음과 같습니다.

//
// MyViewController.m
//
#import "MyViewController.h"
#import "AppDelegate.h"
#import "GAI.h"
#import "GAIFields.h"
#import "GAITracker.h"
#import "GAIDictionaryBuilder.h"

@implementation MyViewController

- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];

    // This screen name value will remain set on the tracker and sent with
    // hits until it is set to a new value or to nil.
    [[GAI sharedInstance].defaultTracker set:kGAIScreenName
                                       value:@"Home Screen"];

    // Send the screen view.
    // Previous V3 SDK versions.
    // [[GAI sharedInstance].defaultTracker
    //     send:[[GAIDictionaryBuilder createAppView] build]];

    // SDK Version 3.08 and up.
    [[GAI sharedInstance].defaultTracker
        send:[[GAIDictionaryBuilder createScreenView] build]];
}