ios - Google Analytics 不适用于 iOS

标签 ios google-analytics

我在 Google Analytics 帐户中的配置:

enter image description here

我的代码:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    GAI *gai = [GAI sharedInstance];
    //gai.optOut = YES;
    gai.trackUncaughtExceptions = YES;  // report uncaught exceptions
    gai.logger.logLevel = kGAILogLevelVerbose;  // remove before app release
    [[GAI sharedInstance] setDispatchInterval:10.0];
    [[GAI sharedInstance] trackerWithTrackingId:@"UA-xxxxxx-3"];

    return YES;
}

在 View Controller 中:

  • (void)viewWillAppear:(BOOL)动画{ [super viewWillAppear:animated];

    id<GAITracker> tracker = [[GAI sharedInstance] defaultTracker];
    [tracker set:kGAIScreenName value:@"Detail Screen"];
    [[GAI sharedInstance].defaultTracker send:[[GAIDictionaryBuilder createScreenView] build]];
    

它确实在我的控制台中显示:

2015-06-24 15:03:36.592 GoogleAnalyticsDemoiOS[9540:264576] VERBOSE: GoogleAnalytics 3.12 +[GAITrackerModel initialize] (GAITrackerModel.m:88): idfa class missing, won't collect idfa
2015-06-24 15:03:36.619 GoogleAnalyticsDemoiOS[9540:264576] INFO: GoogleAnalytics 3.12 -[GAIReachabilityChecker reachabilityFlagsChanged:] (GAIReachabilityChecker.m:159): Reachability flags update: 0X000002
2015-06-24 15:03:36.644 GoogleAnalyticsDemoiOS[9540:264684] VERBOSE: GoogleAnalytics 3.12 -[GAIBatchingDispatcher persist:] (GAIBatchingDispatcher.m:517): Saved hit: {
    parameters =     {
        "&_crc" = 0;
        "&_s" = 1;
        "&_u" = ".etnoKo9L";
        "&_v" = "mi3.1.2";
        "&a" = 800078077;
        "&aid" = "com.mycompany.app";
        "&an" = GoogleAnalyticsDemoiOS;
        "&av" = "1.0";
        "&cd" = "Detail Screen";
        "&cid" = "caf03508-eba6-42f8-9600-3832ce042907";
        "&dm" = "x86_64";
        "&ds" = app;
        "&sr" = 750x1334;
        "&t" = screenview;
        "&tid" = "UA-xxxxxxxx-3";
        "&ul" = en;
        "&v" = 1;
        "&z" = 663648936779959001;
        gaiVersion = "3.12";
    };
    timestamp = "2015-06-24 07:03:36 +0000";
}
2015-06-24 15:03:36.644 GoogleAnalyticsDemoiOS[9540:264684] VERBOSE: GoogleAnalytics 3.12 __70-[GAIBatchingDispatcher checkIAdCampaignAttributionWithHitParameters:]_block_invoke (GAIBatchingDispatcher.m:749): iAd campaign tracking disabled because the iAd framework is not linked. See http://goo.gl/426NGa for instructions.
2015-06-24 15:03:46.642 GoogleAnalyticsDemoiOS[9540:264684] VERBOSE: GoogleAnalytics 3.12 -[GAIRequestBuilder requestGetUrl:payload:] (GAIRequestBuilder.m:195): building URLRequest for https://ssl.google-analytics.com/collect
2015-06-24 15:03:46.643 GoogleAnalyticsDemoiOS[9540:264684] VERBOSE: GoogleAnalytics 3.12 -[GAIBatchingDispatcher dispatchWithCompletionHandler:] (GAIBatchingDispatcher.m:632): Sending hit(s) GET: https://ssl.google-analytics.com/collect?av=1.0&cid=caf03508-eba6-42f8-9600-3832ce042907&tid=UA-64362429-3&a=800078077&dm=x86_64&cd=Detail+Screen&t=screenview&aid=com.wow.touch&ul=en&_u=.etnoKo9L&ds=app&sr=750x1334&v=1&_s=1&_crc=0&an=GoogleAnalyticsDemoiOS&_v=mi3.1.2&ht=1435129416641&qt=10001&z=663648936779959001
2015-06-24 15:03:46.710 GoogleAnalyticsDemoiOS[9540:264576] INFO: GoogleAnalytics 3.12 -[GAIBatchingDispatcher didSendHits:response:data:error:] (GAIBatchingDispatcher.m:226): Hit(s) dispatched: HTTP status -1
2015-06-24 15:03:46.710 GoogleAnalyticsDemoiOS[9540:264684] INFO: GoogleAnalytics 3.12 -[GAIBatchingDispatcher deleteHits:] (GAIBatchingDispatcher.m:529): hit(s) Successfully deleted
2015-06-24 15:03:46.711 GoogleAnalyticsDemoiOS[9540:264684] INFO: GoogleAnalytics 3.12 -[GAIBatchingDispatcher didSendHits:] (GAIBatchingDispatcher.m:237): 1 hit(s) sent

但是在实时 View 中,我总是有 0 个活跃用户。任何想法?谢谢

最佳答案

--- 已更新 ---

这是我修复的方法:

1 - 在 AppDelegate 中添加此属性和 #define 指令(如果您的应用程序中没有):

#define IS_IOS7_AND_UP                      ([[UIDevice currentDevice].systemVersion floatValue] >= 7.0)

@interface AppDelegate ()

// Used for sending Google Analytics traffic in the background.
@property (nonatomic, assign)   BOOL okToWait;
@property (nonatomic, copy)     void (^dispatchHandler)(GAIDispatchResult result);

@end

2- 在 vi​​ewDidLoad 中,我使用 dispatchInterval 作为 20 并初始化跟踪器共享实例:

[GAI sharedInstance].dispatchInterval = 20;
//[[[GAI sharedInstance] logger] setLogLevel:kGAILogLevelVerbose];
// Initialize tracker.
[[GAI sharedInstance] trackerWithTrackingId:MY_GoogleAnalyticsID];

3 - 为您的 AppDelegate 添加此方法:

// This method sends hits in the background until either we're told to stop background processing,
// we run into an error, or we run out of hits.  We use this to send any pending Google Analytics
// data since the app won't get a chance once it's in the background.
- (void)sendHitsInBackground {
    self.okToWait = YES;
    __weak AppDelegate *weakSelf = self;
    __block UIBackgroundTaskIdentifier backgroundTaskId =
    [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{
        weakSelf.okToWait = NO;
    }];

    if (backgroundTaskId == UIBackgroundTaskInvalid) {
        return;
    }

    self.dispatchHandler = ^(GAIDispatchResult result) {
        // If the last dispatch succeeded, and we're still OK to stay in the background then kick off
        // again.
        if (result == kGAIDispatchGood && weakSelf.okToWait ) {
            [[GAI sharedInstance] dispatchWithCompletionHandler:weakSelf.dispatchHandler];
        } else {
            [[UIApplication sharedApplication] endBackgroundTask:backgroundTaskId];
        }
    };
    [[GAI sharedInstance] dispatchWithCompletionHandler:self.dispatchHandler];
}

4- 在 applicationDidEnterBackground 调用 sendHitsInBackground 方法的最后:

- (void)applicationDidEnterBackground:(UIApplication *)application {
    //
    // . . .
    //
    if (IS_IOS7_AND_UP)
        [self sendHitsInBackground];
}

5 - 添加 performFetchWithCompletionHandler 方法并调用 sendHitsInBackground :

// In case the app was sent into the background when there was no network connection, we will use
// the background data fetching mechanism to send any pending Google Analytics data.  Note that
// this app has turned on background data fetching in the capabilities section of the project.
- (void)application:(UIApplication *)application performFetchWithCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {

    if (IS_IOS7_AND_UP)
        [self sendHitsInBackground];

    completionHandler(UIBackgroundFetchResultNewData);
}

在此努力之后,Google Analytics 将开始工作。我在不止一个应用程序中尝试过这个。如果您有任何问题,请告诉我。

无论如何,我不相信只有一种分析工具,需要一些替代品。我建议您使用 Flurry 和/或 Crashlytics (Fabric)。 Flurry 被雅虎收购,Crashlytics 被 Twitter 收购。为什么选择 Fabric,因为它有许多您会爱上的功能!

在这里你可以试试它们:

Fabric : https://fabric.io

乱舞: http://www.flurry.com

你可以调用他们

didFinishLaunchingWithOptions ...

  [self yourAnalyticServices];

你的代码看起来像这样:

- (void)yourAnalyticServices {
    //Flurry Analytics
    [Flurry setAppVersion:kAppVersion];
    [Flurry startSession:kFlurryAnalyticsID];
//    [Flurry setCrashReportingEnabled:NO];
    [Flurry setUserID:[NSString stringWithFormat:@"%@", kUserUUID]];


    //Google Analytics
    // Optional: automatically send uncaught exceptions to Google Analytics.
    //[GAI sharedInstance].trackUncaughtExceptions = YES;
    // Optional: set Google Analytics dispatch interval to e.g. 20 seconds.
    [GAI sharedInstance].dispatchInterval = 20;
    // Optional: set Logger to VERBOSE for debug information.
    //[[[GAI sharedInstance] logger] setLogLevel:kGAILogLevelVerbose];
    // Initialize tracker.
    [[GAI sharedInstance] trackerWithTrackingId:MY_GoogleAnalyticsID];

    //Crashlytics
    [Fabric with:@[CrashlyticsKit]];
}

关于ios - Google Analytics 不适用于 iOS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31019942/

相关文章:

ios - iOS 中水印图像大小根据视频大小而变化

ios - 找不到 GGLCore/GGLCore.h 文件 Analytics.h?

javascript - 是否可以使用 <img> 标签触发页面浏览?

php - 带有 php 的数组用于 Json 输出

javascript - Ionic 与谷歌分析

ios - NSURLSessionUploadTask "finishes"但没有网络流量

ios - 观察NSArray中NSDictionary的值变化

ios - NSMutableData 错误

ios - UIView子自动边框尺寸

google-analytics - 如何为跟踪代码管理器代码正确匿名化 IP?