Wie versenden wir Google Analytics-Ereignisse, wenn die iOS-App in den Hintergrund tritt?

9

Meine iOS-App enthält Links zum App Store von Apple und ich versuche, diese als Ereignisse zu verfolgen.

Das Problem ist, dass wir meine App nicht dazu bringen können, die GA-Ereignisse ordnungsgemäß zu versenden, bevor sie in den Hintergrund tritt. Wir verwenden iOS SDK v2beta4.

Hier ist eine Übersicht über den von uns verwendeten Code. Sie können sehen, wir haben eine Menge von dem, was ich "Versicherungspolice" Code nennen, weil was wir denken, ist der richtige Weg funktioniert nicht. Aber auch der Versicherungscode versendet die Ereignisse nicht immer, bevor meine App in den Hintergrund tritt. Es funktioniert nur etwa 50% der Zeit und den Rest der Zeit muss ich in die App zurückkehren, um die Ereignisse zu versenden.

Wir glauben, der korrekte Weg besteht darin, das Ereignis in "applicationDidEnterBackground" zu versenden und das iOS um zusätzliche Zeit zu bitten, dies über "beginBackgroundTaskWithExpirationHandler" zu tun. Wir haben diesen Code ohne den Code "Versicherungspolice" selbst ausprobiert. Zumindest glaube ich, dass wir jede Zeile des Versicherungscodes korrekt kommentiert haben.

Beachten Sie, dass wir die globale Variable UIBackgroundTaskIdentifier bgTask setzen; in der Headerdatei AppDelegate.h mit dem Code

%Vor%

Hier ist der Code, den wir für den richtigen Weg halten:

%Vor%

Der obige Code ist, was wir denken, sollte funktionieren, aber nicht. Hinweis: Der App Store ist keine gewöhnliche App, sondern eine Website innerhalb einer App, wenn dies einen Unterschied macht.

Als Versicherung haben wir ein paar andere Dinge getan, die die Veranstaltung in etwa 50% der Fälle versenden:

Die erste [[GAI sharedInstance] -Abfrage] wird sofort in der Funktion aufgerufen, in der das Tracking eingestellt wurde

Quellcode:

%Vor%

Wir haben es auch in "applicationWillResignAktiv"

geschrieben %Vor%

Und schließlich, wenn Sie die App vollständig schließen, wird ein weiterer GA-Versand aufgerufen

%Vor%

Nichts davon funktioniert in 100% der Fälle. Nur etwa 50% der Zeit. Also haben wir das getan: Wenn Sie die App erneut eingeben (es spielt keine Rolle, ob aus dem Hintergrund oder der App vollständig geschlossen wurde) senden wir einen Versand

%Vor%

Mit diesem letzten Bit werden die Ereignisse ausgelöst, aber nur, wenn ein Benutzer zu meiner App zurückkehrt. Obwohl ich mir nicht 100% sicher bin, ob es dieser Code ist, der die Ereignisse versendet, wenn ich zur App zurückkehre oder ein GA-Standardversand, wenn ich zurück zur App gehe.

    
Will 18.03.2013, 19:03
quelle

3 Antworten

2

Verwenden Sie [[GANTracker sharedTracker] dispatchSynchronous:]

Die Methode

dispatch führt eine asynchrone Operation aus. Daher wird es sofort zurückkehren, ohne auf den Abschluss des Versandvorgangs zu warten. Ihre App ist wahrscheinlich gesperrt, bevor der eigentliche Versandvorgang abgeschlossen ist.

- BEARBEITEN -

In der neuesten Version der Google Analytics-Bibliothek scheint dispatchSynchronous: method verschwunden zu sein. Da GANTrackerDelegate ebenfalls verschwunden ist, gibt es, soweit ich das sehen kann, keine Möglichkeit herauszufinden, wann ein Dispatch-Vorgang abgeschlossen ist. Daher empfehle ich den Aufruf von endBackgroundTask: nach einem vordefinierten Timeout. Es ist nicht perfekt, aber es ist besser, als es direkt nach dispatch aufzurufen.

Ihr Code sollte folgendermaßen aussehen:

%Vor%     
murat 18.03.2013 22:22
quelle
2

als 'dispatch_get_current_queue ()' wird derzeit ab iOS 6 nicht weiter unterstützt. Sie können jetzt den folgenden Code verwenden:

%Vor%     
Antoine 11.11.2014 15:54
quelle
1

In GoogleAnalytics 3.14 gibt es dispatchWithCompletionHandler: Ich benutze es so:

%Vor%

Und es scheint richtig zu funktionieren.

    
Kubba 23.11.2015 08:46
quelle