이 문서에서는 iOS용 Google 애널리틱스 SDK v3의 고급 구성 기능을 간략하게 소개합니다.
개요
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 애널리틱스로 전송할 수 있습니다.
데이터 설정 및 전송
추적기에서 매개변수-값 쌍의 맵을 설정하고 set
메서드와 send
메서드를 통해 전송하여 데이터를 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 애널리틱스로 데이터를 전송합니다. 이러한 기능을 사용하고 있고 다른 추적기를 사용하여 데이터를 보내려면 수동으로 진행해야 합니다.
참고로 자동 화면 측정은 지정된 GAITrackedViewController
의 tracker
속성에 지정된 추적기를 사용합니다.
포착되지 않은 예외 측정은 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 애널리틱스에 SDK가 전송하는 IP 정보를 저장하기 전에 IP 주소의 마지막 옥텟을 삭제하여 익명처리합니다.
다음 예는 추적기에서 IP 익명 기능을 사용 설정하는 방법을 보여줍니다.
[tracker set:kGAIAnonymizeIp value:@"1"];
IP 익명처리 기능은 언제든지 설정할 수 있습니다.
테스트 및 디버깅
iOS용 Google 애널리틱스 SDK는 테스트와 디버깅을 더 쉽게 하는 도구를 제공합니다.
테스트 실행
SDK는 설정된 경우 데이터가 Google 애널리틱스로 전송되지 않도록 방지하는
dryRun
플래그를 제공합니다. 구현을 테스트하거나 디버깅할 때 Google 애널리틱스 보고서에 테스트 데이터가 표시되지 않게 하려면 dryRun
플래그를 설정해야 합니다.
테스트 실행 플래그를 설정하려면 다음 안내를 따르세요.
[[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]]; }