I am using Google Analytics in my application to track events and sessions.
Earlier the version of analytics was v2.x and now I ha
Had a very same problem. Ended up with creating the new app property on Google Analytics. With new property, everything works like before. Good Luck!
I started fixing this problem after I found out that my average session time was 8 minutes, where I've got a app which plays movies and you expect a much higher average session time.
I ended up with the following implementation:
[[NSNotificationCenter defaultCenter] addObserver:[GATracking class] selector:@selector(startTrackingSession) name:UIApplicationDidBecomeActiveNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:[GATracking class] selector:@selector(endTrackingSession) name:UIApplicationWillResignActiveNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:[GATracking class] selector:@selector(endTrackingSession) name:UIApplicationWillTerminateNotification object:nil];
These observers handle the start and end of a session. A session will start when the application gets active and stops if the application goes to background or gets killed.
Here's the code for starting and ending the tracking session. The ending takes place inside a background task, to make sure the ending call gets dispatched to Google Analytics before going into inactive state. Otherwise it would be schedules for the next startup.
+ (void)startTrackingSession
{
[GAI sharedInstance].dispatchInterval = 20;
// Initialize tracker.
id tracker = [[GAI sharedInstance] defaultTracker];
[tracker send:[[[GAIDictionaryBuilder createEventWithCategory:@"application_events"
action:@"application_session_start"
label:nil
value:nil] set:@"start" forKey:kGAISessionControl] build]];
// Set this after the session start has been sent. Only needs to be set once but you must be sure that two starts are not sent in a row or you will end up with 0:00:00 sessions.
[tracker set:kGAISessionControl
value:nil];
[[GAI sharedInstance] dispatch];
}
+ (void)endTrackingSession
{
id tracker = [[GAI sharedInstance] defaultTracker];
// Call when the session ends.
[tracker send:[[[GAIDictionaryBuilder createEventWithCategory:@"application_events"
action:@"application_session_end"
label:nil
value:nil] set:@"end" forKey:kGAISessionControl] build]];
[tracker set:kGAISessionControl
value:nil];
[self dispatchUsingBackgroundTask];
}
+ (void)dispatchUsingBackgroundTask
{
// As the end tracking session gets called when entering background, run it in a background task to make sure it gets dispatched
UIApplication *app = [UIApplication sharedApplication];
__block UIBackgroundTaskIdentifier bgTask;
bgTask = [app beginBackgroundTaskWithExpirationHandler:^{
[app endBackgroundTask:bgTask];
bgTask = UIBackgroundTaskInvalid;
}];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
[[GAI sharedInstance] dispatch];
double dispatchTimeout = 10.0; // 10 seconds timeout
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(dispatchTimeout * NSEC_PER_SEC));
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
[app endBackgroundTask:bgTask];
bgTask = UIBackgroundTaskInvalid;
});
});
}
Important part if you still see tracking session with a max of 30 minutes, change this setting in the admin section of your property:
If you don't see this settings, you're probably not using Universal Analytics. To find out if you do, checkout this link: https://support.google.com/analytics/answer/3450662?hl=en