我的iOS应用程序中有Apple Apple App Store的链接,我试图将这些作为事件进行跟踪.
问题是我们无法让我的应用程序在进入后台之前正确发送GA事件.我们正在使用iOS SDK v2beta4.
以下是我们使用的代码的概述.您可以看到我们已经提供了许多我称之为"保险单"的代码,因为我们认为正确的方法是行不通的.但即使是保险政策代码并不总是在我的应用程序进入后台之前发送事件.它只能在大约50%的时间内工作,剩下的时间我必须返回应用程序才能发送事件.
我们认为正确的方法是在"applicationDidEnterBackground"中调度事件,并通过"beginBackgroundTaskWithExpirationHandler"向iOS请求额外的时间来执行此操作.我们在没有"保险单"代码的情况下自己尝试了这段代码.至少我相信我们正确地评论了每一行保险代码.
注意我们设置全局变量UIBackgroundTaskIdentifier bgTask; 在带有代码的AppDelegate.h头文件中
UIBackgroundTaskIdentifier bgTask;
Run Code Online (Sandbox Code Playgroud)
以下是我们认为正确执行此操作的代码:
- (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;
});
}
Run Code Online (Sandbox Code Playgroud)
上面的代码是我们认为应该起作用但不起作用的.注意: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 …Run Code Online (Sandbox Code Playgroud) google-analytics objective-c dispatch grand-central-dispatch ios