Google Analytics iOS v2beta3 - Der manuelle Versand funktioniert nicht in applicationWillResignAktiv

9

Ich habe mit dem Google Analytics-SDK v2beta3 gearbeitet und alles funktioniert, außer dass ich keinen manuellen Versand zum Arbeiten bekomme, wenn die App den aktiven Status verlässt. (Fyi, für meine App muss ich Batterieleistung reservieren, also benutze nur '[[GAI sharedinstance] Versand]', um meine Ereignisdaten zu versenden, wenn der Benutzer mit der App fertig ist.)

Ich habe mehrere Dinge ausprobiert, aber während der Dispatch-Aufruf während der Ablaufverfolgung erreicht und ausgeführt wird, scheint es nichts zu tun ... keine Protokollausgabe (ich habe den Debug-Modus aktiviert) und keine Daten hochgeladen. Es sollte mindestens "GoogleAnalytics 2.0b3 - [GAIDispatcher initiateDispatch: retryNumber:] (GAIDispatcher.m: 479) DEBUG: Keine ausstehenden Treffer melden." oder so etwas würde ich denken. Aber nichts im Logbuch und keine Daten gesendet.

Stattdessen werden die Treffer übertragen, wenn die App aus dem Hintergrund fortgesetzt wird, und ich sehe, dass alle Debug-Anweisungen auf meiner Konsole und in meinen Daten erfolgreich an mein Google Analytics-Konto gesendet werden.

Unten ist mein Code ...

%Vor%

Die App erreicht und führt den '[[GAI sharedInstance] Versand]]' aus. Linie, aber tut nichts. Ich bin ein ziemlich Neuling mit Hintergrundaufgaben, wenn die App in den Hintergrund geht, vielleicht mache ich etwas falsch. Aber im Rahmen meiner Untersuchungen habe ich sogar applicationWillResignActive auf diese Weise vereinfacht (was blockieren soll) ... aber ich bekomme das gleiche: keine Debug-Informationen und keine übertragenen Daten.

%Vor%

Ich habe es mit dem Versandintervall nicht negativ versucht (sagen wir 15 Sekunden) und ich bekomme regelmäßige Übertragung im angeforderten Intervall, aber der Aufruf zum manuellen Versand funktioniert nicht.

Aufrufe zum manuellen Versand in anderen Teilen meines Codes funktionieren. Es scheint nur, dass es nicht funktioniert, wenn die App geschlossen wird.

Irgendwelche Gedanken, was ich vielleicht falsch gemacht habe und wie ich das beheben kann?

    
Steve Mason 14.12.2012, 22:33
quelle

3 Antworten

2

Im Gegensatz zu früheren Google Analytics SDK-Versionen wird der manuelle Dispatch-Mechanismus seit v2 nicht synchron ausgeführt, d. h. anstatt darauf zu warten, dass der Dispatch ausgeführt wird, kehrt er sofort zurück. Wenn Sie das Dispatch-Recht verwenden, bevor Sie inaktiv werden, wird der Dispatch nicht ausgeführt, da die Ausführungswarteschlange der Anwendung angehalten wird, bevor der eigentliche Dispatch erfolgt. Als Workaround starte ich eine Hintergrundaufgabe, die für ein paar Sekunden ruht und die App so lange läuft, bis der Versand abgeschlossen ist.

Hoffentlich wird Google die Methode dispatchSynchronously in zukünftigen Versionen des SDK erneut hinzufügen.

Beachten Sie auch, dass Sie in applicationWillTerminate nur 5 Sekunden haben, bis die Anwendung beendet ist. Warten Sie also nicht zu lange.

%Vor%     
Zargony 02.05.2013 11:01
quelle
1

Dies ist seit August 2013 die richtige Antwort.

Solange die App normal geschlossen wurde, d. h. sie hat UIApplicationWillResignActiveNotification erhalten, werden die Treffer beim nächsten Öffnen der App ausgelöst.

Der Grund, warum Sie dies nicht sehen, ist wahrscheinlich, dass das Beenden der App von Xcode es nicht normal beendet. Drücken der Home-Taste, kurz gefolgt von Xcode's Stop, schließt es normal, und es wird funktionieren.

Das Problem hierbei ist, dass Analytics trotz der gesendeten Treffer von Analytics verworfen werden, wenn sie am folgenden Tag nach 4:00 Uhr in der Zeitzone des Analytics-Profils eintreffen. Das ist ein bisschen dornig und könnte eine Lösung rechtfertigen wie Andreas '.

    

Max 31.07.2013 21:44
quelle
0

Wir haben dieses Problem, konnten aber unsere Erfolgsrate auf 50% steigern. Hier ist, wie wir es gemacht haben.

Wir geben einen "Versicherungscode" ein und damit werden unsere Veranstaltungen in etwa 50% der Fälle abgesendet, sobald die App in den Hintergrund wechselt. Die anderen 50% der Zeit werden die Ereignisse nicht gesendet, bis Sie zur App zurückkehren.

Der Versicherungscode, der uns zu 50% gebracht hat, setzt den Dispatch-Anruf innerhalb des Knopfdruckcodes:

%Vor%

Schauen wir uns auch den Beispielcode in der Hauptfrage an - Apple gibt an, den Code für Hintergrundaufgaben in

zu schreiben %Vor%

statt

%Vor%

Aber es scheint nicht, dass das eine große Wirkung für uns hatte. Hier ist Apples Dokumentation zu diesem Thema (siehe Listing 3-3)

Ссылка

Außerdem habe ich einen längeren Beitrag über das, was wir mit Codebeispielen gemacht haben, veröffentlicht, wenn Sie genauer sehen möchten, wie wir zu ungefähr 50% Erfolg gekommen sind: Wie versenden wir Google Analytics-Ereignisse, wenn die iOS-App in den Hintergrund tritt?

An dieser Stelle möchte ich jedoch immer noch eine Lösung, die 100% erreicht, wenn jemand eine gefunden hat.

    
Will 18.03.2013 20:31
quelle

Tags und Links