Cấu hình nâng cao – SDK iOS

Tài liệu này cung cấp thông tin tổng quan về một số tính năng cấu hình nâng cao của SDK Google Analytics dành cho iOS phiên bản 3.

Tổng quan

SDK Google Analytics dành cho iOS cung cấp một lớp GAITracker để đặt và gửi dữ liệu đến Google Analytics, và một singleton GAI đóng vai trò là giao diện đến các giá trị cấu hình chung của quá trình triển khai của bạn.

Khởi chạy

Để có thể đo lường bất kỳ dữ liệu nào, bạn phải khởi chạy ít nhất một trình theo dõi thông qua singleton GoogleAnalytics bằng cách cung cấp tên cho trình theo dõi và mã tài sản Google Analytics:

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

Giờ đây, bạn có thể dùng công cụ theo dõi này để cài đặt và gửi dữ liệu đến Google Analytics.

Cài đặt và gửi dữ liệu

Dữ liệu được gửi đến Google Analytics bằng cách thiết lập liên kết các cặp thông số-giá trị trên trình theo dõi và gửi dữ liệu đó thông qua phương thức setsend:

/*
 * 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];

Lớp GAIDictionaryBuilder giúp đơn giản hoá quá trình tạo lượt truy cập. Bạn nên dùng lớp này cho hầu hết các trường hợp sử dụng. Ở đây, chúng ta có thể gửi cùng một lượt xem màn hình với ít dòng mã hơn:

// 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]];

Cú pháp Ampersand của Measurement Protocol

Bạn cũng có thể đặt giá trị cho một lượt truy cập duy nhất, bằng cách đặt giá trị trên Builder hoặc trên tất cả các lượt truy cập tiếp theo, bằng cách đặt giá trị đó trên chính đối tượng trình theo dõi, sử dụng ký hiệu và cú pháp của Measurement Protocol:

// 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]];

Để biết danh sách đầy đủ các tham số của Measurement Protocol hiện có, hãy xem Tài liệu tham khảo về tham số Measurement Protocol.

Áp dụng giá trị cho nhiều lần truy cập

Mọi giá trị bạn đặt trực tiếp trên trình theo dõi sẽ được duy trì và áp dụng cho nhiều lượt truy cập, như trong ví dụ sau:

// 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];

Bạn chỉ nên đặt những giá trị mà bạn muốn duy trì trên nhiều lượt truy cập ngay trên công cụ theo dõi. Việc đặt tên màn hình cho trình theo dõi là hợp lý, vì giá trị tương tự có thể được áp dụng cho các lượt xem màn hình và lượt truy cập sự kiện tiếp theo. Tuy nhiên, bạn không nên đặt một trường như loại lượt truy cập trên trình theo dõi, vì trường này có thể sẽ thay đổi theo mỗi lượt truy cập.

Sử dụng nhiều thiết bị theo dõi

Bạn có thể sử dụng nhiều trình theo dõi trong một lần triển khai. Việc này có thể hữu ích trong việc gửi dữ liệu đến nhiều thuộc tính:

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.

Các tính năng đo lường tự động (như sàng lọc tự động và đo lường ngoại lệ chưa nắm bắt được) sẽ chỉ sử dụng một trình theo dõi để gửi dữ liệu đến Google Analytics. Nếu đang sử dụng các tính năng này và muốn gửi dữ liệu bằng các công cụ theo dõi khác, bạn cần thực hiện việc này theo cách thủ công.

Để tham khảo, tính năng tự động đo lường màn hình sẽ sử dụng trình theo dõi được chỉ định trong thuộc tính tracker của một GAITrackedViewController nhất định. Tính năng đo lường ngoại lệ chưa phát hiện được sẽ sử dụng trình theo dõi mặc định được chỉ định trong thực thể GAI của bạn.

Sử dụng công cụ theo dõi mặc định

Google Analytics duy trì một trình theo dõi mặc định. Trình theo dõi đầu tiên được khởi tạo sẽ trở thành trình theo dõi mặc định nhưng có thể bị ghi đè:

// 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]];

Lấy mẫu

Bạn có thể bật tính năng lấy mẫu phía máy khách để giới hạn số lượt truy cập được gửi đến Google Analytics. Nếu ứng dụng của bạn có số lượng lớn người dùng hoặc gửi một lượng lớn dữ liệu đến Google Analytics, thì việc bật tính năng lấy mẫu sẽ giúp đảm bảo báo cáo không bị gián đoạn.

Ví dụ: để triển khai lấy mẫu phía máy khách với tỷ lệ 50%, hãy sử dụng mã sau:

// 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"];

Chọn không tham gia cấp ứng dụng

Bạn có thể bật cờ chọn không sử dụng cấp ứng dụng để vô hiệu hoá Google Analytics trên toàn bộ ứng dụng. Xin lưu ý rằng bạn phải đặt cờ này mỗi khi ứng dụng khởi động và sẽ mặc định là NO.

Để cài đặt chọn không tham gia cấp ứng dụng, hãy sử dụng:

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

Để thiết lập chế độ chọn không sử dụng ở cấp ứng dụng, hãy sử dụng:

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

Xoá dữ liệu người dùng phía máy khách

Nếu cần đặt lại hoặc xoá dữ liệu phía máy khách của Google Analytics cho người dùng cuối, bạn có thể xoá các tệp Google Analytics hoặc đặt một Mã ứng dụng khách mới.

Cách 1: Xoá các tệp Google Analytics

Nếu ứng dụng của bạn không đặt Mã ứng dụng khách cho người dùng cuối một cách rõ ràng, thì bạn có thể buộc tạo Mã ứng dụng khách mới bằng cách xoá các tệp Google Analytics dùng để lưu trữ Mã ứng dụng khách.

Bạn có thể sử dụng phương pháp mẫu sau để xoá các tệp Google Analytics. Bạn phải thực thi phương thức này trước khi khởi chạy Google Analytics:

/* 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.
    }
  }
}

Cách 2: Đặt mã ứng dụng khách mới

Bạn có thể tạo và đặt một Mã ứng dụng khách duy nhất mới. Tất cả các lượt truy cập tiếp theo sẽ sử dụng Mã ứng dụng khách mới và dữ liệu trước đó sẽ không được liên kết với Mã ứng dụng khách mới đó.

Thực thi mã sau để tạo và đặt một Mã ứng dụng khách mới:

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

Ẩn danh IP

Việc bật chức năng ẩn danh IP sẽ yêu cầu Google Analytics ẩn danh thông tin IP do SDK gửi bằng cách xoá octet cuối cùng của địa chỉ IP trước khi lưu trữ.

Ví dụ sau đây cho biết cách enable chức năng ẩn danh IP cho thiết bị theo dõi:

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

Bạn có thể đặt chức năng ẩn danh IP bất cứ lúc nào.

Kiểm tra và gỡ lỗi

Google Analytics SDK dành cho iOS cung cấp các công cụ giúp việc thử nghiệm và gỡ lỗi dễ dàng hơn.

Chạy thử nghiệm

SDK cung cấp một cờ dryRun mà khi được đặt, cờ này sẽ ngăn gửi dữ liệu đến Google Analytics. Bạn nên đặt cờ dryRun bất cứ khi nào đang kiểm thử hoặc gỡ lỗi một phương thức triển khai và không muốn dữ liệu thử nghiệm xuất hiện trong báo cáo Google Analytics.

Cách thiết lập cờ chạy khô:

[[GAI sharedInstance] setDryRun:YES];

Trình ghi nhật ký

Giao thức GAILogger được cung cấp để xử lý các thông báo hữu ích từ SDK ở các mức độ chi tiết sau: error, warning, infoverbose.

SDK khởi chạy một quy trình triển khai Logger tiêu chuẩn. Theo mặc định, SDK sẽ chỉ ghi lại cảnh báo hoặc thông báo lỗi vào bảng điều khiển. Cách đặt độ chi tiết của Logger:

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

Bạn cũng có thể sử dụng các cách triển khai tuỳ chỉnh của Logger:

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

Ví dụ đầy đủ

Ví dụ bên dưới cho thấy mã cần thiết để bắt đầu triển khai Google Analytics và gửi một lượt xem màn hình.

Tiếp theo, lượt xem màn hình sẽ được đo khi màn hình đầu tiên hiển thị với người dùng:

Thông thường, bạn có thể thực hiện khởi động quy trình triển khai từ thực thể đại diện của ứng dụng, như trong ví dụ sau:

//
//  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

Sau đó, để đo lường lượt xem màn hình khi lượt xem hiển thị cho người dùng, hãy làm như sau:

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