2013-09-05 11 views
5

Używam FLurry_3.2.2.jar, i kod taki jak ten w każdym Activity. Poprawnie rejestruje wszystkie sesje, ale nie rejestruje zdarzeń. (Właściwie zalogowany jeden zdarzenie, raz z moją działalnością Home)sesje dzienników flurry, ale nie zdarzenia (Android)

@Override 
protected void onStart() 
{ 
    super.onStart(); 
    FlurryAgent.onStartSession(this, Utilities.FlurryKey); 
    FlurryAgent.logEvent("Home"); 
} 
@Override 
protected void onStop() 
{ 
    super.onStop(); 
    FlurryAgent.onEndSession(this); 
} 
+2

Miałem ten sam problem na Flurry_3.2.2 i mam go teraz z Flurry_3.3.0 (ta wersja rejestruje zdarzenia czasami, ale nie zawsze, w większości przypadków traci zdarzenia). W naszym projekcie Flurry_3.2.1 i Flurry_3.2.0 działają tylko dobrze. – kinORnirvana

+0

Znalazłem także 3.3.1, aby nie rejestrować zdarzeń i zamiast tego musiał użyć 3.2.1. – Ryan

Odpowiedz

8

Twój kod wygląda dobrze. W takich przypadkach stwierdzam, że najbardziej prawdopodobną przyczyną jest to, że twoje pełne sesje nie są wysyłane na serwery Flurry. Być może otrzymujesz raport z sesji początkowej, ale sesja jest zamykana na końcu cyklu życia aplikacji i tylko w tym momencie zdarzenia są wysyłane na serwer.

Musisz upewnić się, że onStartSession i onEndSession są wywoływane przy każdym działaniu. Jeśli zostaną one pominięte przy jakiejkolwiek aktywności (szczególnie w przypadku onEndSession), twoja sesja może się nie zamknąć, a zdarzenia mogą nie zostać wysłane.

Zdarzenia wysyłane są pod koniec sesji, gdy wszystkie czynności zostały zatrzymane. Musisz upewnić się, że w pełni zakończysz aplikację na swoim urządzeniu testowym, zanim będziesz oczekiwał, że jakiekolwiek zdarzenia pojawią się na serwerze. Jeśli tego nie zrobiłeś, dane o wydarzeniach mogą nadal znajdować się na urządzeniu, ale nie zostały wysłane.

Zestaw SDK Flurry dostarcza również dzienniki, które mogą pomóc w zawężeniu problemu. Możesz włączyć rejestrowanie za pomocą FlurryAgent.setLogEnabled(true) i FlurryAgent.setLogLevel(Log.DEBUG).

Jeśli masz więcej pytań, skontaktuj się z nami pod adresem [email protected]

Zastrzeżenie: Pracuję z gradem :)

+0

Sprawdzę dwa razy. Mam wrażenie, że jest to związane z cyklem życia moich działań. W niektórych przypadkach używam flagi Intent.FLAG_ACTIVITY_CLEAR_TOP, aby powrócić do mojej działalności uruchamiania, która wymusza na niej wszelkie działania. – Matt

+0

Czym różnią się setLogEvents (boolean) i setLogEnabled (boolean). Jestem trochę zakłopotany. –

+2

setLogEnabled (boolean) służy do logowania konsoli do LogCat, który jest włączony tylko w celu debugowania. setLogEvents (boolean) włącza metody logEvent, dzięki czemu można wysyłać dane na serwery typu "flurry". Domyślnie jest to prawda i zazwyczaj nie ma powodu, aby go wyłączyć (chyba że musisz szybko wyłączyć rejestrowanie zdarzeń Flurry do celów testowych). –

1

Witam Tworzę klasę z zegarem do wysyłania danych do Flurry Server. Rozwiązuje wszystkie moje problemy.

public class TimerFlurry { 

    private static final String TAG = "TIMER FLURRY"; 
    private Handler handler = new Handler(); 
    private Runnable runnable = null; 
    private boolean stop = false; 

    public TimerFlurry(final Context ctx) { 
     Log.d(TAG, "TimerFlurry.TimerFlurry()"); 

     runnable = new Runnable() { 

      boolean inicializou = false; 

      @Override 
      public void run() { 
       if (stop) { 
        Log.d(TAG, "parou Handler!!!"); 
        FlurryAgent.onEndSession(ctx); 
        inicializou = false; 
        return; 
       } 

       Log.d(TAG, "!!!!!!!!!!!!!!!!!!! .run() now: " + new Date()); 
       if (!inicializou) { 
        Log.d(TAG, ">>>>> inicializou Flurry Session!!!"); 
        FlurryAgent.setContinueSessionMillis(5000); 
        FlurryAgent.onStartSession(ctx, "XXXXXXXXXXXXXXXXXXXX"); 
        FlurryAgent.setLogEnabled(true); 
        FlurryAgent.setLogLevel(Log.DEBUG); 
        inicializou = true; 
        handler.postDelayed(runnable, 60000); 
       } else { 
        Log.d(TAG, "!!!!!!!!!!!!! finalizou Flurry Session!!!"); 
        FlurryAgent.onEndSession(ctx); 
        inicializou = false; 
        handler.postDelayed(runnable, 10000);// inicializa em 10 s 
                  // novamente para 
                  // dar o timeout do 
                  // flurry 
       } 
      } 
     }; 

     handler.postDelayed(runnable, 5000); 
    } 

    public void stop() { 
     stop = true; 
    } 
} 
Powiązane problemy