私はGoogleのAnalytics SDK v2beta3を使用しており、アプリがアクティブな状態を離れたときに手動ディスパッチが機能しないことを除いて、すべてが機能しています。(fyi、私のアプリではバッテリー電源を確保する必要があるため、ユーザーがアプリを終了したときにイベントデータをディスパッチするために「[[GAI sharedinstance] dispatch]」のみを使用しています。)
いくつかのことを試しましたが、トレース中にディスパッチ呼び出しに到達して実行されている間、何もしていないようです...ログ出力がなく(デバッグモードがオンになっています)、データがアップロードされません。最小限、「GoogleAnalytics 2.0b3 -[GAIDispatcher initializeDispatch:retryNumber:] (GAIDispatcher.m:479) DEBUG: 保留中のヒットはありません」と報告する必要があります。またはそのようなものだと思います。しかし、ログには何も記録されておらず、データも送信されていません。
代わりに、アプリがバックグラウンドから再開すると、ヒットが送信され、コンソールにすべてのデバッグ ステートメントが表示され、データが Google アナリティクス アカウントに正常に送信されます。
以下は私のコードです...
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
...
// set up Google Analytics tracker
[GAI sharedInstance].trackUncaughtExceptions = YES; // automatically track uncaught exceptions with Google Analytics - sent with stack trace.
[GAI sharedInstance].dispatchInterval = -1; // set Google Analytics dispatch off, will do manually when app goes into background.
[GAI sharedInstance].debug = YES; // set debug to YES for extra debugging information.
id<GAITracker> tracker = [[GAI sharedInstance] trackerWithTrackingId:GOOGLE_ANALYTICS_TRACKING_ID_FOR_TEST]; // Create tracker instance.
[tracker setSessionTimeout:600]; // set min time between sessions to be 10 minutes
[GAI sharedInstance].defaultTracker = tracker; // reset the default tracker if needed
[[GAI sharedInstance] setOptOut:NO];
...
}
- (void)applicationWillResignActive:(UIApplication *)application
{
UIDevice * device = [UIDevice currentDevice];
BOOL backgroundTasksSupported = NO;
if ([device respondsToSelector:@selector(isMultitaskingSupported)]) {
backgroundTasksSupported = device.multitaskingSupported;
}
if (backgroundTasksSupported) {
self.uploadAnalyticsBackgroundTask = [application beginBackgroundTaskWithExpirationHandler:^{[self endBackgroundUploadTask];}];
// Start the long-running task and return immediately.
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ // put block on Global run queue...
[[GAI sharedInstance] dispatch]; // for dispatch of collected metric/analysis data...
[self endBackgroundUploadTask];
});
}
else {
[[GAI sharedInstance] dispatch];
}
}
- (void) endBackgroundUploadTask
{
if(self.uploadAnalyticsBackgroundTask != UIBackgroundTaskInvalid) { // if background task running, end it
[[UIApplication sharedApplication] endBackgroundTask: self.uploadAnalyticsBackgroundTask];
self.uploadAnalyticsBackgroundTask = UIBackgroundTaskInvalid;
}
}
アプリは「[[GAI sharedInstance] dispatch];」に到達して実行します。行しますが、何もしません。私は、アプリがバックグラウンドになったときにバックグラウンド タスクを使用する初心者なので、何か間違ったことをしている可能性があります。しかし、私の調査の一環として、applicationWillResignActive をこれに単純化しました (ブロックしている/ブロックする必要があります)...しかし、同じことが得られます: デバッグ情報も送信データもありません。
- (void)applicationWillResignActive:(UIApplication *)application
{
[[GAI sharedInstance] dispatch];
}
ディスパッチ間隔を負でない値 (たとえば 15 秒) で試してみましたが、要求された間隔で定期的に送信されますが、手動でディスパッチする呼び出しは機能しません。
コードの他の部分での手動ディスパッチの呼び出しは機能します。アプリが閉じているときは機能しないようです。
私が間違っていた可能性があることと、これを修正する方法について何かアドバイスはありますか?