2014-12-17 5 views
30

Ich verwende Google Analytics in meiner Android App und es funktioniert gut. das SDK (google-Play-Service) auf die aktuelle Version (6.587.000) die App auflegt beim Start auf folgende Zeile 8 von 10 mal nach der Aktualisierung:Google Analytics blockiert Android App

GoogleAnalytics analytics = GoogleAnalytics.getInstance(this); 

Es gibt keine Fehler in der Konsole. Ich habe auch Achievements und Ranglisten hinzugefügt, aber Analytics wird zuerst aufgerufen. Ich habe auch den Kontext geändert, aber das funktioniert manchmal und manchmal nicht.

Die einzige Zeit, die ich ein reproduzierbares Ergebnis bekomme, ist, wenn ich folgende Zeilen von AndroidManifest.xml entferne. Dann gibt es kein Einfrieren beim Start mehr.

<meta-data 
     android:name="com.google.android.gms.analytics.globalConfigResource" 
     android:resource="@xml/analytics_global_config" /> 

Aber meine Konfiguration ist korrekt:

<?xml version="1.0" encoding="utf-8" ?> 
<resources> 
    <string name="ga_appName">TestAppName</string> 
    <string name="ga_appVersion">Version1.0</string> 
    <string name="ga_logLevel">verbose</string> 
    <integer name="ga_dispatchPeriod">1000</integer> 
    <bool name="ga_dryRun">true</bool> 
</resources> 

Und wenn ich die Konfiguration dort ändern, ist das gleiche Ergebnis: 8 von 10 mal die App beim Start friert.

Hat jemand eine Ahnung, was das Problem ist oder was ich sonst noch überprüfen kann, damit meine App wieder läuft, ohne beim Start zu frieren?

+0

Nach https://productforums.google.com/forum/#!category-topic/analytics/report-bugs/RAgDNYFk6jo Dieser Fehler wurde in Play-Dienste festgelegt 6.5.99 – gnuf

+0

ich zu ‚com herabgestuft .google.android.gms: play-services: 6.1.71 'und jetzt funktioniert es. Ich hoffe, es wird bald behoben sein. – petrnohejl

Antwort

37

i ähnlich hatte ich den Code unten entfernt und Anwendung läuft ..

<meta-data 
     android:name="com.google.android.gms.analytics.globalConfigResource" 
     android:resource="@xml/analytics_global_config" /> 

und fügen Sie für getTracker Klasse folgenden Code ... bauen die Google Java-Code verwenden, anstatt XML approch

synchronized Tracker getTracker(TrackerName trackerId) { 
     Log.d(TAG, "getTracker()"); 
     if (!mTrackers.containsKey(trackerId)) { 
      GoogleAnalytics analytics = GoogleAnalytics.getInstance(this); 

      // Global GA Settings 
      // <!-- Google Analytics SDK V4 BUG20141213 Using a GA global xml freezes the app! Do config by coding. --> 
      analytics.setDryRun(false); 

      analytics.getLogger().setLogLevel(Logger.LogLevel.INFO); 
      //analytics.getLogger().setLogLevel(Logger.LogLevel.VERBOSE); 

      // Create a new tracker 
      Tracker t = (trackerId == TrackerName.APP_TRACKER) ? analytics.newTracker(R.xml.ga_tracker_config) : null; 
      if (t != null) { 
       t.enableAdvertisingIdCollection(true); 
      } 
      mTrackers.put(trackerId, t); 
     } 
     return mTrackers.get(trackerId); 
    } 
+9

Ich hatte genau das gleiche Problem, und ich brauchte 3 Tage, um die Ursache herauszufinden. Dies ist ein sehr inakzeptabler Fehler, da Google das Tutorial in Google Analytics genau erklärt. – cwhsu

+2

https://groups.google.com/forum/#!topic/ga-mobile-app-analytics/KWY4mDPcUkI – cwhsu

+0

Solch ein unerwartetes und schwer zu debuggendes Problem. Versionskontrolle war die einzige Sache, die mich zu der Annahme führte, dass dies durch einen Fehler im SDK verursacht wurde. Vielen Dank für diese Problemumgehung! – alexgophermix

1

Ich hatte jedes Mal das gleiche ANR-Problem, wenn ich GoogleAnalytics.getInstance anrief (dies). Das Problem scheint zu erscheinen, wenn die Google Play Services-Version in der App nicht mit der auf dem Gerät installierten Version übereinstimmt.

Ich löste dies durch Prüfen, ob Google Play-Dienste "verfügbar" ist:

if (GooglePlayServicesUtil.isGooglePlayServicesAvailable(this) == ConnectionResult.SUCCESS) { 
    GoogleAnalytics analytics = GoogleAnalytics.getInstance(this); 
    // Create your tracker... 
} 
+0

Während die Überprüfung der GPS-Verfügbarkeit eine gute Übung ist, scheint dies das Problem für mich nicht zu lösen. – Adam

+0

GooglePlayServicesUtil.isGooglePlayServicesAvailable (dies) ist veraltet, verwenden Sie GoogleApiAvailability.getInstance(). IsGooglePlayServicesAvailable (ctx) – Kenumir