My configuration in Google Analytics account:
我在谷歌分析账户的配置:
My code:
我的代码:
- (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;
}
In view controller:
在视图控制器:
-
(void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated];
(空白)那些:(BOOL)动画{[超级那些动画):;
id<GAITracker> tracker = [[GAI sharedInstance] defaultTracker]; [tracker set:kGAIScreenName value:@"Detail Screen"]; [[GAI sharedInstance].defaultTracker send:[[GAIDictionaryBuilder createScreenView] build]];
}
}
It did shows in my console:
它确实在我的控制台中显示:
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
But in Realtime view, I always got 0 active users. Any idea? Thanks
但在实时视图中,我总是有0个活跃用户。任何想法?谢谢
2 个解决方案
#1
3
--- UPDATED ---
推荐- - - - - - - - - - - -更新
Here is how I fixed :
以下是我如何修正的:
1 - add this properties and #define directive (if you don't have in your application) in AppDelegate :
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- in viewDidLoad I use dispatchInterval as 20 and Initialize the tracker shared instance :
2-在viewDidLoad中,我使用dispatchInterval作为20初始化跟踪器共享实例:
[GAI sharedInstance].dispatchInterval = 20;
//[[[GAI sharedInstance] logger] setLogLevel:kGAILogLevelVerbose];
// Initialize tracker.
[[GAI sharedInstance] trackerWithTrackingId:MY_GoogleAnalyticsID];
3 - add this method for your AppDelegate :
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- in the end of applicationDidEnterBackground call sendHitsInBackground method :
4-在applicationDidEnterBackground调用sendHitsInBackground方法的末尾:
- (void)applicationDidEnterBackground:(UIApplication *)application {
//
// . . .
//
if (IS_IOS7_AND_UP)
[self sendHitsInBackground];
}
5 - Add performFetchWithCompletionHandler method and call 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);
}
and Google Analytics will start working after this effort. I try this in more than one application. If you have any question, please let me know.
谷歌分析将在这之后开始工作。我在多个应用程序中尝试了这一点。如果你有任何问题,请告诉我。
Anyway, I don't trust only 1 analytic tool, need some alternatives. I suggest you use Flurry and/or Crashlytics (Fabric). Flurry acquired by Yahoo, Crashlytics acquired by Twitter. Why Fabric, because it has so many features that you'll fall in love with!
总之,我不相信只有一个分析工具,需要一些替代方法。我建议您使用Flurry和/或Crashlytics(面料)。被雅虎收购的Flurry,被推特收购的Crashlytics。为什么是面料,因为它有很多你会喜欢的特点!
Here you can try them :
在这里你可以试试:
Fabric : https://fabric.io
面料:https://fabric.io
Flurry : http://www.flurry.com
乱舞:http://www.flurry.com
You can call them in
你可以给他们打电话
didFinishLaunchingWithOptions ...
[self yourAnalyticServices];
And your code looks like this :
你的代码是这样的:
- (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]];
}
#2
2
In the AppDElegate.m file :
在AppDElegate。m文件:
#import "AppDelegate.h"
#import "GAI.h"
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[GAI sharedInstance].trackUncaughtExceptions = YES;
[GAI sharedInstance].dispatchInterval = 1;
[[[GAI sharedInstance] logger]setLogLevel:kGAILogLevelVerbose];
id<GAITracker> tracker = [[GAI sharedInstance] trackerWithTrackingId:@"TrackingId"];
[GAI sharedInstance].defaultTracker = tracker;
return YES;
}
In ViewController.h
在ViewController.h
#import <UIKit/UIKit.h>
#import "GAITrackedViewController.h"
@interface FirstViewController : GAITrackedViewController
@end
In ViewController.m
在ViewController.m
- (void)viewDidLoad {
[super viewDidLoad];
self.screenName = @"RED Screen";
}
Try it. This worked for me just fine. I tried it more than three apps. And All are working for realtime. If your account for your app is new then you might have to wait for 24h or more to see the result. Sometimes it take time to display realtime data without any reason.
试一试。这对我很有效。我尝试了不止三个应用。所有这些都是实时工作。如果你的应用程序是新的,那么你可能需要等待24h或更多才能看到结果。有时无需任何理由就可以显示实时数据。
#1
3
--- UPDATED ---
推荐- - - - - - - - - - - -更新
Here is how I fixed :
以下是我如何修正的:
1 - add this properties and #define directive (if you don't have in your application) in AppDelegate :
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- in viewDidLoad I use dispatchInterval as 20 and Initialize the tracker shared instance :
2-在viewDidLoad中,我使用dispatchInterval作为20初始化跟踪器共享实例:
[GAI sharedInstance].dispatchInterval = 20;
//[[[GAI sharedInstance] logger] setLogLevel:kGAILogLevelVerbose];
// Initialize tracker.
[[GAI sharedInstance] trackerWithTrackingId:MY_GoogleAnalyticsID];
3 - add this method for your AppDelegate :
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- in the end of applicationDidEnterBackground call sendHitsInBackground method :
4-在applicationDidEnterBackground调用sendHitsInBackground方法的末尾:
- (void)applicationDidEnterBackground:(UIApplication *)application {
//
// . . .
//
if (IS_IOS7_AND_UP)
[self sendHitsInBackground];
}
5 - Add performFetchWithCompletionHandler method and call 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);
}
and Google Analytics will start working after this effort. I try this in more than one application. If you have any question, please let me know.
谷歌分析将在这之后开始工作。我在多个应用程序中尝试了这一点。如果你有任何问题,请告诉我。
Anyway, I don't trust only 1 analytic tool, need some alternatives. I suggest you use Flurry and/or Crashlytics (Fabric). Flurry acquired by Yahoo, Crashlytics acquired by Twitter. Why Fabric, because it has so many features that you'll fall in love with!
总之,我不相信只有一个分析工具,需要一些替代方法。我建议您使用Flurry和/或Crashlytics(面料)。被雅虎收购的Flurry,被推特收购的Crashlytics。为什么是面料,因为它有很多你会喜欢的特点!
Here you can try them :
在这里你可以试试:
Fabric : https://fabric.io
面料:https://fabric.io
Flurry : http://www.flurry.com
乱舞:http://www.flurry.com
You can call them in
你可以给他们打电话
didFinishLaunchingWithOptions ...
[self yourAnalyticServices];
And your code looks like this :
你的代码是这样的:
- (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]];
}
#2
2
In the AppDElegate.m file :
在AppDElegate。m文件:
#import "AppDelegate.h"
#import "GAI.h"
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[GAI sharedInstance].trackUncaughtExceptions = YES;
[GAI sharedInstance].dispatchInterval = 1;
[[[GAI sharedInstance] logger]setLogLevel:kGAILogLevelVerbose];
id<GAITracker> tracker = [[GAI sharedInstance] trackerWithTrackingId:@"TrackingId"];
[GAI sharedInstance].defaultTracker = tracker;
return YES;
}
In ViewController.h
在ViewController.h
#import <UIKit/UIKit.h>
#import "GAITrackedViewController.h"
@interface FirstViewController : GAITrackedViewController
@end
In ViewController.m
在ViewController.m
- (void)viewDidLoad {
[super viewDidLoad];
self.screenName = @"RED Screen";
}
Try it. This worked for me just fine. I tried it more than three apps. And All are working for realtime. If your account for your app is new then you might have to wait for 24h or more to see the result. Sometimes it take time to display realtime data without any reason.
试一试。这对我很有效。我尝试了不止三个应用。所有这些都是实时工作。如果你的应用程序是新的,那么你可能需要等待24h或更多才能看到结果。有时无需任何理由就可以显示实时数据。