2010-03-23 4 views
1

Quelqu'un sait comment résoudre ce problème?Problème avec Google Analytics pour Android: "Dispatcher pense qu'il a fini, mais il y a eu 543 événements échoués"

03-23 13:03:20.585: WARN/googleanalytics(3430): Problem with socket or streams. 
03-23 13:03:20.585: WARN/googleanalytics(3430): java.net.SocketException: Broken pipe 
03-23 13:03:20.585: WARN/googleanalytics(3430):  at org.apache.harmony.luni.platform.OSNetworkSystem.sendStreamImpl(Native Method) 
03-23 13:03:20.585: WARN/googleanalytics(3430):  at org.apache.harmony.luni.platform.OSNetworkSystem.sendStream(OSNetworkSystem.java:498) 
03-23 13:03:20.585: WARN/googleanalytics(3430):  at org.apache.harmony.luni.net.PlainSocketImpl.write(PlainSocketImpl.java:585) 
03-23 13:03:20.585: WARN/googleanalytics(3430):  at org.apache.harmony.luni.net.SocketOutputStream.write(SocketOutputStream.java:59) 
03-23 13:03:20.585: WARN/googleanalytics(3430):  at org.apache.http.impl.io.AbstractSessionOutputBuffer.flushBuffer(AbstractSessionOutputBuffer.java:87) 
03-23 13:03:20.585: WARN/googleanalytics(3430):  at org.apache.http.impl.io.AbstractSessionOutputBuffer.flush(AbstractSessionOutputBuffer.java:94) 
03-23 13:03:20.585: WARN/googleanalytics(3430):  at org.apache.http.impl.AbstractHttpClientConnection.doFlush(AbstractHttpClientConnection.java:168) 
03-23 13:03:20.585: WARN/googleanalytics(3430):  at org.apache.http.impl.AbstractHttpClientConnection.flush(AbstractHttpClientConnection.java:173) 
03-23 13:03:20.585: WARN/googleanalytics(3430):  at com.google.android.apps.analytics.PipelinedRequester.sendRequests(Unknown Source) 
03-23 13:03:20.585: WARN/googleanalytics(3430):  at com.google.android.apps.analytics.NetworkDispatcher$DispatcherThread$AsyncDispatchTask.dispatchSomePendingEvents(Unknown Source) 
03-23 13:03:20.585: WARN/googleanalytics(3430):  at com.google.android.apps.analytics.NetworkDispatcher$DispatcherThread$AsyncDispatchTask.run(Unknown Source) 
03-23 13:03:20.585: WARN/googleanalytics(3430):  at android.os.Handler.handleCallback(Handler.java:587) 
03-23 13:03:20.585: WARN/googleanalytics(3430):  at android.os.Handler.dispatchMessage(Handler.java:92) 
03-23 13:03:20.585: WARN/googleanalytics(3430):  at android.os.Looper.loop(Looper.java:123) 
03-23 13:03:20.585: WARN/googleanalytics(3430):  at 

android.os.HandlerThread.run(HandlerThread.java:60) 
03-23 13:03:21.088: WARN/googleanalytics(3430): Dispatcher thinks it finished, but there were 543 failed events 

spécialement la dernière ligne expliquer pourquoi il est perdu tellement de données, comme le répartiteur pense qu'il est fait, mais ont 543 événements non envoyés ...

L'application ont une bonne connexion Internet et il n'y a aucun problème à atteindre l'api côté serveur de l'application.

Je vois dans les analyses que beaucoup de démarrages et d'événements de clic sont perdus ces derniers jours, même si je sais que le trafic est normal puisque je peux voir les statistiques de l'API du serveur.

Dans les rapports d'analyse, je constate une sous-déclaration au jour le jour. Donc, les problèmes semblent se propager/se développer à tous les appareils utilisant cette application.

Im se demander pourquoi Google ne répond pas dans leur courrier groupes - plusieurs personnes se sont plaints de ce ... bien, bien ...

Mais, je ne suis toujours pas sûr s'il y a quelque chose que je peut faire pour le réparer ou non. S'il n'y a rien que je puisse faire pour le réparer, je suppose que ce n'est pas de ma faute s'il s'est cassé. Mais j'ai l'impression que c'est le cas, car le problème s'est considérablement aggravé lors du dernier déploiement sur le marché Android.

Quelqu'un d'autre ayant de l'expérience sur Google Analytics pour android?

Répondre

5

Le problème est lié aux espaces dans les étiquettes trackEvent et trackPageView. 1) Supprimer tous les espaces (ou leur échapper) de tous les appels trackEvent et trackPageView.

2) Effacer la table google_analytics.dbevents (au moins toutes les lignes ayant lable colonne contenant un espace)

. . .

Pour effacer les lignes d'événements par le code que vous pouvez utiliser le code suivant:

import android.content.Context; 
import android.database.SQLException; 
import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteOpenHelper; 

public class AnalyticsDB extends SQLiteOpenHelper { 

    // The Android's default system path of your application database. 
    private static String DB_PATH = "/data/data/<YOUR_PACKAGENAME>/databases/"; 

    private static String DB_NAME = "google_analytics"; 

    private SQLiteDatabase myDataBase; 

    /** 
    * Constructor Takes and keeps a reference of the passed context in order to 
    * access to the application assets and resources. 
    * 
    * @param context 
    */ 
    public AnalyticsDB(Context context) { 
     super(context, DB_NAME, null, 1); 
    } 

    public void openDataBase() throws SQLException { 

     // Open the database 
     String myPath = DB_PATH + DB_NAME + ".db"; 
     myDataBase = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READWRITE); 

    } 

    @Override 
    public synchronized void close() { 

     if (myDataBase != null) myDataBase.close(); 

     super.close(); 

    } 

    @Override 
    public void onCreate(SQLiteDatabase db) { 

    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 

    } 

    public int deleteEvents() { 
     return myDataBase.delete("events", "label LIKE '% %'", null); 
    } 
} 

et l'ajouter à votre activité au démarrage

public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

      AnalyticsDB myDbHelper = new AnalyticsDB(context); 

      try { 
       myDbHelper.openDataBase(); 
       int deleted = myDbHelper.deleteEvents(); 
       myDbHelper.close(); 
      } 
      catch (SQLException sqle) { 
       throw sqle; 
      } 
      finally{ 
       myDbHelper.close(); 
      } 

    } 

Le tableau des événements seront supprimés lors de la désinstallation et installe l'application, mais ce n'est probablement pas toujours la solution préférée.

Ainsi, si le point 1) et 2) n'est pas fixé, votre code Google Analytics sera mort la viande --- pour toujours ...

Kudos à Jason et Stig B pour aider à le débogage

Questions connexes