【发布时间】:2013-03-18 19:03:10
【问题描述】:
我的 iOS 应用中包含指向 Apple 应用商店的链接,我正在尝试将这些链接作为事件进行跟踪。
问题是我们无法让我的应用在进入后台之前正确调度 GA 事件。我们正在使用 iOS SDK v2beta4。
这里是我们正在使用的代码的概述。你可以看到我们已经放入了很多我称之为“保险单”的代码,因为我们认为正确的方法是行不通的。但即使是保险单代码也并不总是在我的应用程序进入后台之前调度事件。它仅在大约 50% 的时间内有效,其余时间我必须返回应用程序才能调度事件。
我们认为正确的方法是在“applicationDidEnterBackground”中调度事件,并通过“beginBackgroundTaskWithExpirationHandler”请求 iOS 额外的时间来执行此操作。我们已经在没有我的“保险单”代码的情况下自行尝试了此代码。至少我相信我们正确地注释掉了每一行保险代码。
注意我们设置了全局变量 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] dispatch] 立即在设置了跟踪的函数中调用
源代码:
- (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 默认调度。
【问题讨论】:
标签: ios objective-c google-analytics grand-central-dispatch dispatch