Google Analytics SDK for iOS - 遷移至第 3 版

本指南說明如何升級至 iOS 版 Google Analytics (分析) SDK 第 3 版。

資訊一覽:第 3 版的新功能

第 3 版中的 API 已重構,以便在原生和網路平台上更加一致。所有 V2 使用者都應留意下列變更:

  • 現在,系統會使用單一 send:(NSDictionary *)params 方法傳送命中資料。
  • 已移除自動用戶端工作階段管理功能。如有需要,您可以在管理介面中設定工作階段逾時。瞭解詳情
  • 偵錯模式已替換為 Logger
  • 新增項目: 新增了 dryRun 標記,以免報表中出現傳送的資料。
  • 新功能: iOS 裝置已支援當地幣別。

如需完整異動清單,請參閱「 變更記錄」一文。

事前準備

開始升級至第 3 版之前,您必須準備下列項目:

升級路徑

如要開始使用,請從目前的實作項目中選取升級至 v3 的路徑:

v1.x 至 v3

建議 Google Analytics (分析) iOS SDK v1.x 使用者按照第 3 版入門指南開始使用第 3 版。

v2.x 至 v3

第 2.x 版使用者應按照下列步驟升級至第 3 版:

  1. 將所有 send<hit-type> 便利方法替換為新的 send: 方法:
    // v2 (Old)
    id<GAITracker> tracker = [[GAI sharedInstance] defaultTracker];
    [tracker sendView:@"HomeScreen"];
    
    // v3
    id<GAITracker> tracker = [[GAI sharedInstance] defaultTracker];
    // Set the screen name on the tracker so that it is used in all hits sent from this screen.
    [tracker set:kGAIScreenName value:@"Home Screen"];
    
    // Send a screenview.
    // [tracker send:[[GAIDictionaryBuilder createAppView]  build]];   // Previous V3 SDK versions.
    [tracker send:[[GAIDictionaryBuilder createScreenView]  build]];   // SDK Version 3.08 and up.
    
  2. 第 3 版已移除自動的用戶端工作階段管理功能。您可在管理介面中設定工作階段逾時期間,預設值為「30 分鐘」。您也可以使用 sessionControl 參數手動啟動及停止工作階段。 進一步瞭解第 3 版中的工作階段管理。

  3. 自動螢幕追蹤的使用者應將 GAITrackedViewController.trackedViewName 的參照替換為 GAITrackedViewController.screenName
    // v2 (Old)
    #import "GAITrackedViewController.h"
    
    @implementation AboutViewController
    
    - (void)viewDidAppear:(BOOL)animated {
      [super viewDidAppear:animated];
      self.trackedViewName = @"About Screen";
    }
    
    // ... Rest of ViewController implementation.
    
    // v3
    #import "GAITrackedViewController.h"
    
    @implementation AboutViewController
    
    - (void)viewDidAppear:(BOOL)animated {
      [super viewDidAppear:animated];
      self.screenName = @"About Screen";
    }
    
    // ... Rest of ViewController implementation.
    
  4. 偵錯模式已淘汰,請改用 Logger
    // v2 (Old)
    [GAI sharedInstance].debug = YES;
    
    // v3
    [[GAI sharedInstance].logger setLogLevel:kGAILogLevelVerbose];
    
  5. 已移除 GAI.useHttp 屬性。如要使用 HTTP (而非預設 HTTPS) 傳送命中,請改為在每個 GAITracker 上設定 kGAIUseSecure 參數:
    // v2 (Old)
    // AppDelegate.m
    
    #import AppDelegate.h
    #import GAI.h
    
    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    
        static NSString const *kGaPropertyId = @"UA-XXXX-Y";
        id tracker = [[GAI sharedInstance] trackerWithTrackingId:kGaPropertyId];
    
        // Send hits using HTTP (default=HTTPS).
        tracker.useHttps = NO;
    
    }
    
    // v3
    // AppDelegate.m
    
    #import AppDelegate.h
    #import GAI.h
    
    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    
        static NSString const *kGaPropertyId = @"UA-XXXX-Y";
        id tracker = [[GAI sharedInstance] trackerWithTrackingId:kGaPropertyId];
    
        // Send hits using HTTP (default=HTTPS).
        [tracker set:kGAIUseSecure value:[@NO stringValue]];
    
    }
    
  6. 第 3 版 SDK 不會再在應用程式開啟時自動啟動新的工作階段。如果您想從第 2 版保留這項行為,必須在使用者啟動應用程式時實作自己的工作階段控制邏輯:
  7. // AppDelegate.m
    
    #import AppDelegate.h
    #import GAI.h
    
    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    
        static NSString const *kGaPropertyId = @"UA-XXXX-Y";
        id tracker = [[GAI sharedInstance] trackerWithTrackingId:kGaPropertyId];
    
        // CAUTION: Setting session control directly on the tracker persists the
        // value across all subsequent hits, until it is manually set to null.
        // This should never be done in normal operation.
        //
        // [tracker set:kGAISessionControl value:@"start"];
    
        // Instead, send a single hit with session control to start the new session.
        [tracker send:[[[GAIDictionaryBuilder createEventWithCategory:@"UX"
                                                               action:@"appstart"
                                                                label:nil
                                                                value:nil] set:@"start" forKey:kGAISessionControl] build]];
    
    
  8. SDK 不會再保留應用程式層級的停用設定,而且每次啟動應用程式時都必須設定 (預設為 NO)。進一步瞭解如何設定應用程式層級的選擇不採用功能

參考資料

以下各節提供如何使用 V3 SDK 設定和傳送資料的參考範例。

在第 3 版中使用字典傳送資料

在 V3 中,系統會使用單一 send: 方法傳送資料,該方法採用 Google Analytics (分析) 欄位和值的 NSDictionary 做為引數。提供 GAIDictionaryBuilder 公用程式類別,可簡化建立命中程序:

id<GAITracker> tracker = [[GAI sharedInstance] defaultTracker];
[tracker set:kGAIScreenName value:@"Home Screen"];

// Previous V3 SDK versions.
// [tracker send:[[GAIDictionaryBuilder createAppView] setValue:@"Premium"  // Creates a Map of hit type 'AppView' (screenview) and set any additional fields.
//                                                     forKey:[customDimensionForIndex:1] build]; // Build and return the dictionary to the send method.

// SDK Version 3.08 and up.
[tracker send:[[GAIDictionaryBuilder createScreenView] setValue:@"Premium"  // Creates a Map of hit type 'ScreenView' and set any additional fields.
                                                       forKey:[customDimensionForIndex:1] build]; // Build and return the dictionary to the send method.

GAIDictionaryBuilder 類別可用來建立任何支援的命中類型,例如事件:

id<GAITracker> tracker = [[GAI sharedInstance] defaultTracker];

[tracker send:[[GAIDictionaryBuilder createEventWithCategory:@"ui_action"     // Event category (required)
                                                      action:@"button_press"  // Event action (required)
                                                       label:@"play"          // Event label
                                                       value:nil] build]];    // Event value

進一步瞭解如何在第 3 版傳送資料

在第 3 版中的追蹤器設定資料

您也可以使用 set:value:forKey 方法,直接在 GAITracker 上設定值。直接設定的值會套用至來自 GAITracker 的所有後續命中:

// Values set directly on a tracker apply to all subsequent hits.
[tracker set:kGAIScreenName value:@"Home Screen"];

// This screenview hit will include the screen name "Home Screen".
// [tracker send:[[GAIDictionaryBuilder createAppView] build]];   // Previous V3 SDK versions.
[tracker send:[[GAIDictionaryBuilder createScreenView] build]];   // SDK Version 3.08 and up.

// And so will this event hit.
[tracker send:[[GAIDictionaryBuilder createEventWithCategory:@"ui_action"
                                                      action:@"button_press"
                                                       label:@"play"
                                                       value:nil] build]];

如要清除在 GAITracker 設定的值,請將屬性設為 nil

// Clear the previously-set screen name value.
[tracker set:kGAIScreenName
       value:nil];

// Now this event hit will not include a screen name value.
[tracker send:[[GAIDictionaryBuilder createEventWithCategory:@"ui_action"
                                                      action:@"button_press"
                                                       label:@"play"
                                                       value:nil] build]];

進一步瞭解如何在 v3 中設定資料