Проблема Google Analytics для Android с dispatch()

#android #google-analytics

#Android #google-analytics

Вопрос:

При использовании Google Analytics для Android, если я использую

tracker.start("UA-YOUR-ACCOUNT-HERE", 20, this)

затем каждые 20 секунд события будут отправляться автоматически, даже если я не делаю это вручную с помощью

 tracker.dispatch()
  

Мой вопрос в том, что произойдет, если пользователь завершит работу моего приложения в течение 20 секунд?
будет ли оно отправлено?

или я должен отправлять все ожидающие события вручную, когда пользователь пытается выйти?

Комментарии:

1. Был ли какой-либо из ответов достаточным? Если это так, пожалуйста, отметьте один из них как принятый 🙂

Ответ №1:

Вам не нужно ничего делать — события сохраняются и будут объединены со следующей отправкой, которая произойдет в вашем приложении (предположительно, при следующем запуске приложения пользователем).

Обратите внимание, что серверы Analytics помечают время попадания на основе того, когда они получают данные, а не на основе того, когда событие фактически произошло — поэтому, если ваши пользователи используют приложение пару минут в день, посещения, которые произошли 10-го числа, могут отображаться в Analytics 11-го и т.д.

Обновление: Чтобы уточнить поведение при вызове tracker.stop(), в этот момент он не отправляет ожидающие события. Они остаются во внутренней базе данных sqlite и первыми отключаются при вызове отправки при следующем запуске вашего приложения. Причина, по которой они не запускаются при остановке трекера, заключается в том, что это добавило бы времени к уничтожаемой активности, делая приложение менее «быстрым» при выходе. Это также причина, по которой вам следует тщательно подумать перед отправкой в методе onDestroy.

Ответ №2:

tracker.stop() не отправляет данные. Мой совет — также поместить tracker.dispatch() в метод onDestroy()

   @Override
  protected void onDestroy() {
    super.onDestroy();
    tracker.dispatch();
    // Stop the tracker when it is no longer needed.
    tracker.stop();
  }
  

Источник:
http://www.google.com/support/forum/p/Google Analytics/thread?tid=70a919f5b097f5dcamp;hl=en

Комментарии:

1. действительно ли это лучший способ? выполнение операций, но в фоновом режиме, когда пользователь уходит? мне кажется более логичным, что вызов stop принадлежит этому вызову, но не тому, который нужно отправить.

Ответ №3:

Рекомендуется остановить трекер, когда ваше приложение будет уничтожено, используя следующее;

   @Override
  protected void onDestroy() {
    super.onDestroy();
    // Stop the tracker when it is no longer needed.
    tracker.stop();
  }
  

Я бы предположил, что это приведет к отправке любых ожидающих событий.

Ответ №4:

Этот код поможет вам…..

 public class TestActivity extends Activity { 

   GoogleAnalyticsTracker tracker; 


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

        tracker = GoogleAnalyticsTracker.getInstance(); 

        // Start the tracker in manual dispatch mode... 
        tracker.startNewSession("UA-33332745-1", this); 

        setContentView(R.layout.main); 
        Button createEventButton = (Button)findViewById(R.id.NewEventButton); 
        createEventButton.setOnClickListener(new OnClickListener() { 

          public void onClick(View v) { 
            tracker.trackEvent( 
                "Clicks",  // Category 
                "Button",  // Action 
                "clicked", // Label 
                77);       // Value 
          } 
        }); 

        Button createPageButton = (Button)findViewById(R.id.NewPageButton); 
        createPageButton.setOnClickListener(new OnClickListener() { 

          public void onClick(View v) {        
            // Add a Custom Variable to this pageview, with name of "Medium" and value "MobileApp" 
            tracker.setCustomVar(1, "Medium", "Mobile App");         
            tracker.trackPageView("/testApplicationHomeScreen"); 
          } 
        }); 

        Button quitButton = (Button)findViewById(R.id.QuitButton); 
        quitButton.setOnClickListener(new OnClickListener() { 

          public void onClick(View v) { 
            finish(); 
          } 
        }); 

        Button dispatchButton = (Button)findViewById(R.id.DispatchButton); 
        dispatchButton.setOnClickListener(new OnClickListener() { 

          public void onClick(View v) { 
            tracker.dispatch(); 
          } 
        }); 
      } 


      protected void onDestroy() { 
        super.onDestroy(); 
        // Stop the tracker when it is no longer needed. 
        tracker.stopSession(); 
      } 
    }