我的iOS应用中有链接,苹果的App Store,我试图跟踪这些作为事件。
问题是,我们不能让我的应用程序正确地分派GA事件它进入后台之前。 我们使用的是iOS SDK v2beta4。
下面是我们所使用的代码的概述。 你可以看到,我们已经投入了很多我称之为“保险”的代码,因为我们认为这是正确的做法是行不通的。 但是,即使保险单码并不总是分派事件我的应用程序进入后台之前。 它只适用的时间约50%的我要回到该应用获取的事件调度休息的时间。
我们认为,正确的做法是指派该事件中“applicationDidEnterBackground”,并要求iOS的额外时间通过“beginBackgroundTaskWithExpirationHandler”要做到这一点。 我们试图在自己的代码没有我的“保险单”的代码。 至少我相信,我们的保险每一行代码正确注释掉。
请注意,我们设置了全局变量UIBackgroundTaskIdentifier bgTask; 在与代码的AppDelegate.h头文件
UIBackgroundTaskIdentifier bgTask;
下面是我们认为是这样做的正确方法的代码:
- (void)applicationDidEnterBackground:(UIApplication *)application
{
UIApplication *app = [UIApplication sharedApplication];
bgTask = [app beginBackgroundTaskWithExpirationHandler:^{
[app endBackgroundTask:bgTask];
bgTask = UIBackgroundTaskInvalid;
}];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
[[GAI sharedInstance] dispatch];
[app endBackgroundTask:bgTask];
bgTask = UIBackgroundTaskInvalid;
});
}
上面的代码是什么,我们认为应该工作,但没有。 注:App Store是不是普通的应用程序,而是一个应用程序内的网站,如果有差别。
作为保险政策,我们已经做了哪些派遣约50%的时间的情况下一些其他的东西:
第[GAI sharedInstance]调度]是在跟踪已设置的功能立即调用
源代码:
- (IBAction)goToAppStore:(id)sender
{
...
// Tracking
// Using events (pressing on buttons)
id <GAITracker> tracker = [[GAI sharedInstance] defaultTracker];
[tracker sendEventWithCategory:@"App Checkout"
withAction:@"Checkout Button Pressed"
withLabel:nameApp.text
withValue:nil];
[[GAI sharedInstance] dispatch];
...
}
我们也把它放在“applicationWillResignActive”
- (void)applicationWillResignActive:(UIApplication *)application
{
...
[[GAI sharedInstance] dispatch];
}
最后,当你彻底关闭应用程序的另一个GA派遣被称为
- (void)applicationWillTerminate:(UIApplication *)application
{
[[GAI sharedInstance] dispatch];
}
这些都没有工作时间的100%。 只有大约50%的时间。 所以我们这样做:当你重新进入应用程序(也不要紧,如果从背景或应用已经完全关闭)我们发送调度
- (void)applicationDidBecomeActive:(UIApplication *)application
{
[[GAI sharedInstance] dispatch];
}
这最后一点的调度事件,但只有当用户返回到我的应用程序。 虽然我不是100%肯定,如果是这个代码时,我返回到应用程序或GA默认的调度,当我回去的应用程序,被分派的事件。