การกำหนดค่าขั้นสูง - iOS SDK

เอกสารนี้แสดงภาพรวมเกี่ยวกับคุณลักษณะการกำหนดค่าขั้นสูงบางอย่างของ Google Analytics SDK สำหรับ iOS v3

ภาพรวม

Google Analytics SDK สำหรับ iOS มีคลาส GAITracker สำหรับตั้งค่าและส่งข้อมูลไปยัง Google Analytics และซิงเกิล GAI ที่ทำหน้าที่เป็นอินเทอร์เฟซสำหรับการกำหนดค่าส่วนกลางของการใช้งาน

การเริ่มต้น

ก่อนที่จะวัดข้อมูลได้ คุณต้องเริ่มต้นเครื่องมือติดตามอย่างน้อย 1 รายการผ่าน GoogleAnalytics Singleton โดยตั้งชื่อให้เครื่องมือติดตามและรหัสพร็อพเพอร์ตี้ Google Analytics ดังนี้

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

แต่ตอนนี้สามารถใช้เครื่องมือติดตามนี้ในการตั้งค่าและส่งข้อมูลไปยัง Google Analytics ได้แล้ว

การตั้งค่าและการส่งข้อมูล

ระบบจะส่งข้อมูลไปยัง Google Analytics โดยการตั้งค่าการแมปคู่พารามิเตอร์-ค่าในเครื่องมือติดตาม และส่งผ่านเมธอด set และ send ดังนี้

/*
 * 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 ช่วยลดความซับซ้อนของกระบวนการสร้าง Hit และเหมาะสำหรับกรณีการใช้งานส่วนใหญ่ ในส่วนนี้เราจะส่งมุมมองหน้าจอแบบเดียวกันที่มีบรรทัดโค้ดน้อยลงได้ดังนี้

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

ไวยากรณ์ Ampersand ของ Measurement Protocol

นอกจากนี้คุณยังสามารถตั้งค่าสำหรับ Hit เดียวได้โดยตั้งค่าใน Builder หรือสำหรับ Hit ที่ตามมาทั้งหมดโดยการตั้งค่าในออบเจ็กต์เครื่องมือติดตามโดยใช้เครื่องหมายและไวยากรณ์ของ 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]];

ดูรายการพารามิเตอร์ Measurement Protocol ที่มีอยู่ทั้งหมดได้ที่ข้อมูลอ้างอิงพารามิเตอร์ Measurement Protocol

การใช้ค่ากับ Hit หลายรายการ

ค่าใดๆ ที่ตั้งค่าไว้ในตัวติดตามโดยตรงจะคงอยู่และใช้กับ Hit หลายรายการ ดังตัวอย่างต่อไปนี้

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

ควรตั้งค่าในเครื่องมือติดตามโดยตรงเฉพาะค่าที่คุณต้องการคงไว้ในหลายๆ Hit เท่านั้น การตั้งชื่อหน้าจอในเครื่องมือติดตามก็น่าจะเหมาะสม เนื่องจากสามารถใช้ค่าเดียวกันนี้กับการดูหน้าจอและ Event Hit ที่ตามมาได้ อย่างไรก็ตาม ไม่แนะนําให้ตั้งค่าช่อง เช่น ประเภท Hit บนเครื่องมือติดตาม เนื่องจากมีแนวโน้มว่าจะมีการเปลี่ยนแปลงตาม Hit แต่ละรายการ

การใช้ตัวติดตามหลายอย่าง

อาจใช้เครื่องมือติดตามหลายรายการในการใช้งานครั้งเดียว ซึ่งมีประโยชน์ในการส่งข้อมูลไปยังพร็อพเพอร์ตี้หลายรายการ

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 Analytics หากคุณใช้ฟีเจอร์เหล่านี้และต้องการส่งข้อมูลด้วยเครื่องมือติดตามอื่นๆ คุณต้องดำเนินการด้วยตนเอง

การวัดหน้าจออัตโนมัติจะใช้อุปกรณ์ติดตามที่ระบุไว้ในพร็อพเพอร์ตี้ tracker ของ GAITrackedViewController ที่กำหนดเพื่อใช้อ้างอิง การวัดข้อยกเว้นที่ตรวจไม่พบจะใช้เครื่องมือติดตามเริ่มต้นที่ระบุไว้ในอินสแตนซ์ GAI

การใช้เครื่องมือติดตามเริ่มต้น

Google Analytics รักษาตัวติดตามเริ่มต้น อุปกรณ์ติดตามแรกที่เริ่มใช้งานจะกลายเป็นเครื่องมือติดตามเริ่มต้น แต่อาจถูกลบล้าง

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

ทดสอบผลิตภัณฑ์

คุณสามารถเปิดใช้การสุ่มตัวอย่างฝั่งไคลเอ็นต์เพื่อจำกัดจำนวน Hit ที่ส่งไปยัง Google Analytics หากแอปมีผู้ใช้จำนวนมากหรือส่งข้อมูลปริมาณมากไปยัง Google Analytics การเปิดใช้การสุ่มตัวอย่างจะช่วยให้การรายงานไม่ขาดตอน

ตัวอย่างเช่น หากต้องการใช้การสุ่มตัวอย่างฝั่งไคลเอ็นต์ในอัตรา 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 Analytics ทั่วทั้งแอป โปรดทราบว่าต้องตั้งค่าแฟล็กนี้ทุกครั้งที่แอปเริ่มทำงาน และจะมีค่าเริ่มต้นเป็น 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 Analytics ของผู้ใช้ปลายทาง คุณสามารถลบไฟล์ Google Analytics หรือตั้งรหัสไคลเอ็นต์ใหม่

ตัวเลือกที่ 1: ลบไฟล์ Google Analytics

หากแอปไม่ได้ตั้งค่ารหัสไคลเอ็นต์ให้กับผู้ใช้ปลายทางอย่างชัดเจน คุณจะบังคับให้สร้างรหัสไคลเอ็นต์ใหม่ได้โดยการลบไฟล์ Google Analytics ที่ใช้จัดเก็บรหัสไคลเอ็นต์

คุณใช้เมธอดตัวอย่างต่อไปนี้เพื่อลบไฟล์ Google Analytics ได้ วิธีการนี้ต้องมีการดำเนินการก่อนเริ่มต้น 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.
    }
  }
}

ตัวเลือกที่ 2: ตั้งค่ารหัสไคลเอ็นต์ใหม่

คุณสามารถสร้างและตั้งค่ารหัสไคลเอ็นต์ที่ไม่ซ้ำใหม่ได้ Hit ที่ตามมาทั้งหมดจะใช้รหัสไคลเอ็นต์ใหม่ และข้อมูลก่อนหน้าจะไม่เชื่อมโยงกับรหัสไคลเอ็นต์ใหม่

เรียกใช้โค้ดต่อไปนี้เพื่อสร้างและตั้งค่ารหัสไคลเอ็นต์ใหม่

[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 Analytics ลบข้อมูล IP ที่ SDK ส่งให้โดยลบอ็อกเท็ตสุดท้ายของที่อยู่ IP ก่อนพื้นที่เก็บข้อมูล

ตัวอย่างต่อไปนี้แสดงวิธีenableฟังก์ชันการลบข้อมูลระบุตัวบุคคลของ IP สำหรับเครื่องมือติดตาม

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

ทั้งนี้ คุณสามารถตั้งค่าฟังก์ชันการลบข้อมูลระบุตัวบุคคลของ IP ได้ทุกเมื่อ

การทดสอบและการแก้ไขข้อบกพร่อง

Google Analytics SDK สำหรับ iOS มีเครื่องมือที่ช่วยให้การทดสอบและแก้ไขข้อบกพร่องง่ายขึ้น

ทดลองเรียกใช้

SDK ให้แฟล็ก dryRun ซึ่งเมื่อตั้งค่าแล้วจะป้องกันไม่ให้มีการส่งข้อมูลใดๆ ไปยัง Google Analytics คุณควรตั้งค่าแฟล็ก dryRun เมื่อคุณทดสอบหรือแก้ไขข้อบกพร่องของการติดตั้งใช้งาน และไม่ต้องการให้ข้อมูลการทดสอบปรากฏในรายงาน Google Analytics

วิธีตั้งค่าสถานะการทดลองเรียกใช้

[[GAI sharedInstance] setDryRun:YES];

เครื่องบันทึก

โปรโตคอล GAILogger มีไว้เพื่อจัดการข้อความที่เป็นประโยชน์จาก SDK ที่การพูดรายละเอียดในระดับต่อไปนี้: error, warning, info และ verbose

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 Analytics และส่งการดูหน้าจอเดียว

ถัดไป ระบบจะวัดการดูหน้าจอเมื่อหน้าจอแรกแสดงให้ผู้ใช้เห็น ดังนี้

โดยปกติแล้ว การเริ่มติดตั้งใช้งานจะทำได้จากผู้รับมอบสิทธิ์แอป ดังตัวอย่างต่อไปนี้

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