iOS용 Google 애널리틱스 SDK v1 (기존)

iOS용 모바일 앱용 Google 애널리틱스 SDK를 사용하면 iOS 기반 애플리케이션에서 Google 애널리틱스를 쉽게 구현할 수 있습니다. 이 문서에서는 SDK를 앱과 통합하는 방법을 설명합니다.

SDK 개요

이 SDK는 기존 웹사이트로 사용자를 추적하고 기존 웹페이지의 위젯과 상호작용하는 것을 추적하도록 설계된 추적 모델을 사용합니다. 따라서 아래에서 사용되는 용어는 기존 웹사이트 추적 모델을 반영하며 모바일 애플리케이션을 추적하는 데 사용됩니다. 이 SDK의 작동 방식을 이해하려면 애널리틱스 추적을 잘 알고 있어야 합니다.

모바일 추적 SDK를 이용하면 다음과 같은 애널리틱스 상호작용 유형으로 전화 애플리케이션을 추적할 수 있습니다.

페이지 조회 추적
페이지 조회는 기존 웹사이트의 트래픽 양을 측정하는 표준 수단입니다. 모바일 앱에는 HTML 페이지가 포함되어 있지 않으므로 페이지 조회 요청을 트리거할 시기와 빈도를 결정해야 합니다. 또한 페이지 조회 요청은 디렉터리 구조를 보고하도록 설계되었으므로 애널리틱스의 콘텐츠 보고서에서 페이지 경로 이름 지정을 활용하려면 요청을 설명하는 이름을 제공해야 합니다. 선택한 이름은 애널리틱스 보고서에 실제로는 HTML 페이지가 아니더라도 페이지 경로로 채워지지만, 호출을 위한 추가 그룹을 제공하도록 경로를 구조화하면 더욱 편리합니다.
이벤트 추적
애널리틱스에서 이벤트는 페이지 조회 요청과는 다른 방법으로 웹페이지 요소에 대한 사용자 상호작용을 추적하도록 설계되었습니다. Google 애널리틱스의 이벤트 추적 기능을 사용하면 추가 호출을 할 수 있으며, 이 호출은 애널리틱스 보고서 인터페이스의 이벤트 추적 섹션에 보고됩니다. 이벤트는 카테고리를 사용하여 그룹화되며, 보고 시 유연성을 제공하는 이벤트별 라벨을 사용할 수도 있습니다. 예를 들어 멀티미디어 앱의 경우 동영상 카테고리에 재생/중지/일시중지 작업이 있고 각 동영상 이름에 라벨을 할당할 수 있습니다. 그러면 Google 애널리틱스 보고서에서 동영상 카테고리로 태그가 추가된 모든 이벤트의 이벤트를 집계합니다. 이벤트 추적에 대한 자세한 내용은 이벤트 추적 가이드를 참조하세요.
전자상거래 추적
전자상거래 추적 기능을 사용하여 장바구니 거래와 인앱 구매를 추적합니다. 거래를 추적하려면 addTransaction 메서드를 호출하여 전체 거래뿐만 아니라 장바구니에 있는 각 제품의 addItem 메서드도 생성합니다. 수집된 데이터는 Google 애널리틱스 인터페이스의 전자상거래 보고 섹션에서 볼 수 있습니다. 전자상거래 추적에 대한 자세한 내용은 전자상거래 추적 가이드를 참고하세요.
맞춤 변수
맞춤 변수는 Google 애널리틱스 추적을 세분화하기 위해 추적 코드에 삽입할 수 있는 이름-값 쌍 태그입니다. 맞춤 변수를 사용하는 방법에 대한 자세한 내용은 맞춤 변수 가이드를 참고하세요.
Thumb 지원되지 않음
이제 iPhone용 SDK에서 표준 Thumb 버전뿐만 아니라 NoThumb 버전의 라이브러리도 함께 제공됩니다. 라이브러리의 NoThumb 버전을 사용하려면 libGoogleAnalytics.a 파일 대신 libGoogleAnalytics_NoThumb.a 파일을 사용합니다.

시작하기

요구사항

Google 애널리틱스의 추적 기능을 iOS 앱과 통합하려면 다음이 필요합니다.

설정

  • Xcode를 열고 새 iPhone OS 프로젝트를 만듭니다.
  • SDK의 라이브러리 디렉터리에서 GANTracker.hlibGoogleAnalytics.a를 새 프로젝트로 드래그합니다.
  • 프로젝트에 CFNetwork 프레임워크를 포함하고 libsqlite3.0.dylib에 연결합니다.

모바일 앱용 Google 애널리틱스 SDK는 iOS 2.0 이상을 실행하는 모든 iPhone 또는 iPod Touch에서 작동합니다. 이 라이브러리는 기본 애플리케이션을 지원하는 모든 iOS 버전과 호환됩니다.

성공적으로 설정되었을 경우 프로젝트가 어떻게 나타나는지 보여주는 예제 애플리케이션이 SDK에 포함되어 있습니다. 이 템플릿을 애널리틱스 통합 앱의 템플릿으로 사용하세요.

SDK 사용

SDK를 사용하기 전에 먼저 www.google.com/analytics에서 무료 계정을 만들고, 허위이지만 설명이 포함된 웹사이트 URL (예: http://mymobileapp.mywebsite.com)을 사용하여 해당 계정에 새 웹 속성을 만들어야 합니다. 속성을 만든 후에는 새로 만든 속성에 대해 생성된 웹 속성 ID를 기록하거나 사본을 보관해야 합니다.

애플리케이션 자체 또는 서비스 약관을 통해 앱 내의 사용자 활동을 익명으로 추적하고 보고할 권리가 있음을 사용자에게 명시해야 합니다. Google 애널리틱스 SDK를 사용하면 계정에 가입할 때 동의해야 하는 Google 애널리틱스 SDK 서비스 약관이 추가로 적용됩니다.

샘플 및 권장사항

code.google.com의 analytics-api-samples 프로젝트에서 샘플 코드와 권장사항을 확인할 수 있습니다.

EasyTracker 라이브러리

EasyTracker 라이브러리를 사용할 수 있습니다. 또한 개발 작업을 거의 하지 않고도 애플리케이션 및 UIViewController 수준 추적 기능을 제공합니다. analytics-api-samples 프로젝트의 다운로드 섹션에서 이를 확인할 수 있습니다.

트래커 시작

[GANTracker sharedTracker]를 통해 가져온 추적기 싱글톤에서 startTrackerWithAccountID 메서드를 호출하여 추적기를 시작합니다. 앱 대리자의 applicationDidFinishLaunching 메서드에서 이 메서드를 직접 호출하는 것이 편리한 경우가 많습니다. 웹 속성 ID, 필수 전달 기간 및 선택적 대리자를 전달합니다. 예를 들면 다음과 같습니다.

#import "BasicExampleAppDelegate.h"

#import "GANTracker.h"

// Dispatch period in seconds
static const NSInteger kGANDispatchPeriodSec = 10;

@implementation BasicExampleAppDelegate

@synthesize window = window_;

- (void)applicationDidFinishLaunching:(UIApplication *)application {
  // **************************************************************************
  // PLEASE REPLACE WITH YOUR ACCOUNT DETAILS.
  // **************************************************************************
  [[GANTracker sharedTracker] startTrackerWithAccountID:@"UA-0000000-1"
                                        dispatchPeriod:kGANDispatchPeriodSec
                                              delegate:nil];

  NSError *error;
  if (![[GANTracker sharedTracker] setCustomVariableAtIndex:1
                                                       name:@"iPhone1"
                                                      value:@"iv1"
                                                  withError:&error]) {
    // Handle error here
  }

  if (![[GANTracker sharedTracker] trackEvent:@"my_category"
                                       action:@"my_action"
                                        label:@"my_label"
                                        value:-1
                                   withError:&error]) {
    // Handle error here
  }

  if (![[GANTracker sharedTracker] trackPageview:@"/app_entry_point"
                                   withError:&error]) {
    // Handle error here
  }

  [window_ makeKeyAndVisible];
}

- (void)dealloc {
  [[GANTracker sharedTracker] stopTracker];
  [window_ release];
  [super dealloc];
}

@end

페이지 조회 및 이벤트 추적

페이지 조회 및 이벤트를 추적하는 것은 간단합니다. 페이지 조회를 트리거할 때마다 추적기 객체의 trackPageView를 호출하기만 하면 됩니다. trackEvent를 호출하여 이벤트를 녹화합니다. 페이지 조회 및 이벤트에 대한 자세한 내용은 위의 SDK 개요를 참고하세요.

맞춤 변수 사용

맞춤 변수를 추가하는 방법도 간단합니다. 모바일 SDK에서 제공하는 setCustomVariableAtIndex 메서드를 사용하면 됩니다. 각 맞춤 변수가 매핑되는 색인을 미리 계획하여 이전의 기존 변수를 덮어쓰지 않도록 하는 것이 좋습니다. 맞춤 변수에 대한 자세한 내용은 맞춤 변수 가이드를 참고하세요. setCustomVariableAtIndex 메서드는 자체적으로 데이터를 직접 전송하지 않습니다. 대신 다음에 추적된 페이지 조회 또는 이벤트와 함께 데이터가 전송됩니다. 페이지 조회 또는 이벤트를 추적하기 전에 setCustomVariableAtIndex를 호출해야 합니다. 맞춤 변수의 기본 범위는 페이지 범위입니다.

전자상거래 추적 이용하기

애플리케이션에서 전자상거래 추적을 사용 설정하는 방법은 4가지입니다.

  • addTransaction
  • addItem
  • trackTransactions
  • clearTransactions

addTransactionaddItem를 호출하면 거래 또는 항목이 내부 전자상거래 버퍼에 추가되며 이 버퍼에 더 많은 항목과 거래를 추가할 수 있습니다. trackTransactions를 호출할 때만 거래와 항목이 디스패처로 전송되고 Google 애널리틱스로 전송되도록 큐에 추가됩니다.

버퍼를 삭제하려면 clearTransactions 메서드를 호출하면 됩니다. 참고: 이전에 운영자에게 전송된 거래나 Google 애널리틱스에서 이미 수집한 거래는 회수되지 않습니다.

다음 샘플 코드로 시작해 보세요.

  /**
   * The purchase was processed.  We will track the transaction and its associated line items
   * now, but only if the purchase has been confirmed.
   */
- (void) processPurchase:Purchase purchase {
  [[GANTracker sharedTracker] addTransaction:[purchase transactionId]
                                  totalPrice:[purchase totalPrice]
                                   storeName:[purchase store]
                                    totalTax:[purchase tax]
                                shippingCost:[purchase shipping]
                                   withError:&error];
  if (error) {
    // Handle error
  }
  for (PurchaseItem item in [purchase items]) {
    [[GANTracker sharedTracker] addItem:[purchase transactionId]
                                itemSKU:[item itemSKU]
                              itemPrice:[item price]
                              itemCount:[item count]
                           itemCategory:[item category]
                              withError:&error];
    if (error) {
      // Handle error
    }
  }

  if ([purchase isConfirmed]) {
    [[GANTracker sharedTracker] trackTransactions:&error];
  } else {
    // The purchase was denied or failed in some way.  We need to clear out
    // any data we've already put in the Ecommerce buffer.
    [[GANTracker sharedTracker] clearTransactions:&error];
  }
}

전자상거래에 대한 자세한 내용은 전자상거래 추적 가이드를 참고하세요.

IP 익명 처리

사용자 IP 정보를 익명처리하려면 속성 anonymizeIp를 YES로 설정합니다. 이렇게 하면 Google 애널리틱스에 저장 전에 IP 주소의 마지막 옥텟을 삭제하여 SDK에서 전송한 정보를 익명처리하도록 지시하게 됩니다.

다음은 설정 방법의 예입니다.

 [[GANTracker sharedTracker] setAnonymizeIp:YES];

언제든지 anonymizeIp를 설정할 수 있습니다.

샘플링 레이트 설정

sampleRate 속성을 사용하여 샘플링 레이트를 설정할 수 있습니다. 애플리케이션에서 많은 애널리틱스 트래픽이 생성되는 경우 샘플링 레이트를 설정하면 샘플링된 데이터를 사용하여 보고서가 생성되지 않을 수 있습니다. 샘플링은 순 사용자를 대상으로 일관되게 이루어지므로 샘플링 레이트를 사용 설정하면 추세 및 보고에 무결성이 유지됩니다. sampleRate 매개변수는 NSUInteger이며 0~100 사이의 값을 가질 수 있습니다. 다음은 sampleRate를 95%로 낮추는 예입니다.

 [[GANTracker sharedTracker] setSampleRate:95];

비율이 0이면 조회 생성이 중지되고 비율이 100이면 모든 데이터가 Google 애널리틱스로 전송됩니다. 추적 메서드를 호출하기 전에 sampleRate를 설정하는 것이 가장 좋습니다.

샘플링에 대한 자세한 내용은 샘플링 개념 가이드를 참조하세요.

조회수 일괄 처리

연결 및 배터리 오버헤드를 절약하려면 추적 요청을 일괄 처리하는 것이 좋습니다. 일괄 요청을 할 때마다 추적 객체에서 dispatch를 호출할 수 있으며 이 작업은 수동으로 또는 특정 시간 간격으로 실행할 수 있습니다.

알려진 문제

  • 추천/트래픽 소스: 현재 iOS 기기에서는 앱 다운로드의 캠페인/추천 소스를 추적할 수 없습니다.
  • 다음과 같은 상황에서는 dispatch를 호출하지 않는 것이 좋습니다.
    • applicationWillTerminate 메서드에서
    • applicationDidEnterBackground
    • stopTracker에 전화하기 전
    이렇게 하면 조회가 두 번 전송될 수 있습니다. 대신 dispatchSynchronous: 메서드를 사용하세요.
  • 여러 스레드에서 GANTracker 메서드를 호출하면 모호한 SQLite 오류가 발생할 수 있습니다. 모든 호출은 동일한 스레드에서 실행해야 합니다.
  • 캠페인 추적

    일반 캠페인 추적

    iOS용 Google 애널리틱스 SDK 버전 1.3에서는 캠페인 추천을 추적할 수 있습니다. 예를 들어 애플리케이션에서 커스텀 URL 스키마를 구현하는 경우 캠페인 쿼리 매개변수가 포함된 URL을 만들 수 있습니다. 이러한 URL에 대한 응답으로 애플리케이션이 실행되면 쿼리 매개변수를 검색하여 setReferrer에 전달하여 정보가 Google 애널리틱스에 저장되도록 할 수 있습니다.

    캠페인 추천 정보를 설정하려면 다음과 같이 setReferrer 메서드를 사용합니다.

      [[GANTracker sharedTracker] setReferrer:referrer withError:&error];
    

    이 기능을 사용하는 데는 두 가지 제한사항이 있습니다. 먼저 setReferrer를 호출하기 전에 startTrackerWithAccountID를 호출해야 합니다. 이렇게 해야 하는 이유는 Google 애널리틱스에서 사용하는 SQLite 데이터베이스가 startTrackerWithAccountID를 호출하기 전에 설정되지 않았고 setReferrer에 해당 데이터베이스가 필요하기 때문입니다. startTrackerWithAccountID를 호출하지 않은 경우 오류가 반환됩니다.

    두 번째 제한사항은 setReferrer에 전달된 추천 문자열이 특정 형식을 따라야 한다는 점입니다. URL 매개변수 집합의 형식을 취해야 하며 gclid 매개변수를 하나 이상 포함하거나 utm_campaign, utm_medium, utm_source의 각각 하나씩 포함해야 합니다. 후자의 경우 utm_term 및 utm_content 매개변수도 포함할 수 있습니다.

    gclid 매개변수는 Google 애널리틱스와 Google Ads를 자동으로 연결하는 자동 태그 추가 기능의 일부입니다. 자동 태그 추가를 사용한 캠페인 추천의 예시는 다음과 같습니다.

    referrer = @“gclid=gclidValue”;
    

    수동 캠페인 추천 문자열은 다음과 같이 표시됩니다.

    referrer = @“utm_campaign=campaign&utm_source=source&utm_medium=medium&utm_term=term&utm_content=content”;
    

    잘못된 형식의 리퍼러 문자열을 setReferrer에 전달하면 리퍼러 정보는 변경되지 않으며 false의 반환 값이 반환됩니다. 반환 값이 true이면 리퍼러가 업데이트되었으며, 앞으로 모든 조회에 추가될 예정임을 나타냅니다. 또한 오류가 반환되어 호출이 실패한 경우 문제에 관한 세부정보를 확인할 수 있습니다.

    또한 setReferrer를 호출하고 true를 반환하면 새 세션이 시작됩니다.

    매개변수 필수 설명 예시
    utm_campaign 캠페인 이름. 특정 제품 프로모션 또는 전략적 캠페인을 식별하기 위한 키워드 분석에 사용됩니다. utm_campaign=spring_sale
    utm_source 검색엔진, 뉴스레터 또는 기타 소스를 식별하는 데 사용되는 캠페인 소스 utm_source=google
    utm_medium 캠페인 매체: 이메일 또는 클릭당비용 (CPC)과 같은 매체를 식별하는 데 사용됨 utm_medium=cpc
    utm_term 아니요 광고 키워드를 제공하기 위해 유료 검색과 함께 사용되는 캠페인 검색어 utm_term=running+shoes
    utm_content 아니요 캠페인 콘텐츠: 동일한 URL을 가리키는 광고 또는 링크를 구분하기 위해 A/B 테스트 및 콘텐츠 타겟팅 광고에 사용됨 utm_content=logolink
    utm_content=textlink