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.
Verwenden Sie [[GANTracker sharedTracker] dispatchSynchronous:]
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%Tags und Links objective-c ios google-analytics grand-central-dispatch dispatch