הגדרה מתקדמת – iOS SDK

במסמך הזה מפורטת סקירה כללית של כמה מתכונות ההגדרה המתקדמות של Google Analytics SDK ל-iOS v3.

סקירה

ה-SDK של Google Analytics ל-iOS מספק מחלקה GAITracker להגדרה ולשליחה של נתונים ל-Google Analytics, ו-סינגלטון GAI שמשמש כממשק לערכי התצורה הגלובליים של ההטמעה.

אתחול

כדי שניתן יהיה למדוד נתונים כלשהם, צריך לאתחל לפחות מכשיר מעקב אחד באמצעות SSO של GoogleAnalytics. לשם כך, צריך להזין שם למכשיר המעקב ומזהה נכס ב-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 מפשטת את תהליך בניית היטים ומומלץ להשתמש בה ברוב תרחישי השימוש. כאן אנחנו יכולים לשלוח את אותה צפייה במסך עם פחות שורות קוד:

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

ניתן להגדיר את הערכים גם בהיט יחיד, על ידי הגדרת הערך ב-Builder, או בכל ההיטים הבאים, על ידי הגדרה שלהם באובייקט המעקב עצמו, באמצעות תחביר האמפרסנד של 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.

החלת ערכים על התאמות מרובות

ערכים שמוגדרים ישירות בשירות המעקב יישארו קבועים ויוחלו על מספר היטים, כמו בדוגמה הזו:

// 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 Analytics. אם אתם משתמשים בתכונות האלה ואתם רוצים לשלוח נתונים באמצעות מכשירי מעקב אחרים, תצטרכו לעשות זאת באופן ידני.

לידיעתך, מדידת המסך האוטומטית משתמשת במכשיר המעקב שצוין במאפיין tracker של GAITrackedViewController נתון. מדידת החריגים של Uncaught משתמשת במכשיר המעקב שמוגדר כברירת מחדל שצוין במכונה של 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]];

דגימות

ניתן להפעיל דגימה בצד הלקוח כדי להגביל את מספר ההתאמות שנשלחות ל-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 או להגדיר Client-ID חדש.

אפשרות 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: הגדרת מספר לקוח חדש

אפשר ליצור מזהה לקוח ייחודי ולהגדיר אותו. כל ההיטים הבאים ישתמשו במספר הלקוח החדש והנתונים הקודמים לא ישויכו למספר הלקוח החדש.

מריצים את הקוד הבא כדי ליצור ולהגדיר מזהה לקוח חדש:

[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 על ידי הסרת 8 התווים האחרונים של כתובת ה-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]];
}