2016-07-14 2 views
2

Я включил аналитику Firebase в свое приложение, которое имеет два процесса: a Фон процесс и UI процесс. То, что я испытал с использованием Firebase, состояло в том, что я могу регистрировать события из UI, но не с Фон процесс.Регистрация событий аналитики в Firebase в многопроцессорном приложении

Я могу видеть через журналы Firebase на консоли Android Studio, хотя события регистрируются, но никогда не планируются к загрузке на консоль Firebase при записи с Фоновый процесс. Это поведение, которое аналитирует Firebase - регистрирует события только из одного процесса? Если да, то как он решает, из какого процесса регистрировать события?

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

Вся помощь приветствуется.

ответ

4

Для регистрации событий Firebase Analytics из нескольких процессов необходимо выполнить инициализацию Firebase вручную во втором процессе. Полуавтоматическая установка Firebase в основном ожидает однопроцессорных приложений и требует дополнительной работы по настройке для большинства своих API (кроме Crash Reporting).

По существу вы вызываете следующий после инициализации второго процесса, при условии, что вы настроили Firebase через google-services.json файл и Google Services Gradle плагин:

FirebaseApp.initializeApp(context, FirebaseOptions.fromResource(context)) 

Немного сложнее часть может быть как обеспечить, чтобы это только один раз и только во втором процессе. Один из подходов состоит в том, чтобы имитировать то, что сама Firebase делает для первого процесса (через Manifest merging) - определить ContentProvider. Так что в вашем манифесте добавить что-то вроде следующего:

<provider 
    android:name=".MyFBProvider" 
    android:authorities="org.mydomain.mytestapp.MyFBProvider" 
    android:process=":myexternalprocess" 
    android:exported="false" 
    android:syncable="false" /> 

Вашего ContentProvider выглядит, по существу, как это, плюс пустого переопределение всех абстрактных методов:

public class MyFBProvider extends ContentProvider { 

    private static boolean created = false; 

    @Override 
    public boolean onCreate() { 
     if (created) { 
      // Workaround for https://issuetracker.google.com/issues/37045392 
      return false; 
     } 

     Context context = getContext(); 
     FirebaseApp.initializeApp(context, FirebaseOptions.fromResource(context)); 
     created = true; 

     // Return false to mimic behavior of FirebaseInitProvider. 
     // It should keep the pseudo ContentProvider from being a real one. 
     return false; 
    } 

    ... 
} 

Используя ContentProvider гарантирует, что код выполняется, прежде чем все else во время инициализации процесса и только в указанном вами процессе.

+0

Спасибо за ответ @Uli Определенно попробуем это. – Siddharth2092

+0

Надеюсь, это сработает для вас! Я сам использую этот шаблон для инициализации Firebase как можно раньше в моем втором процессе. – Uli

+0

Я сделал небольшую модификацию к примеру, чтобы обойти прерывистую фреймворческую ошибку, с которой я столкнулся во время тестирования (ContentProvider инициализирован несколько раз): https://code.google.com/p/android/issues/detail?id = 172655 – Uli

1

Firebase Analytics поддерживает многопроцессорные приложения. Вы тестировали приложение на устройстве с сервисами Google Play или на эмуляторе без сервисов Google Play. Захват вывода logcat с включенным протоколом отладки ответит на большинство этих вопросов.

Для того, чтобы сохранить события разряда батареи, загружаются не чаще, чем один раз в час. Если вы регистрировали события из основного процесса, ожидали увидеть загрузку (что обычно происходит через 15 секунд после первого события, записанного на устройствах без услуг Google Play), то регистрировалось больше событий из вторичного процесса и ждало еще 15 секунд, вы не увидите вторая партия событий загружается. Примерно за час до того, как будет загружена вторая партия событий.

Если вы оставили эмулятор, работающий в фоновом режиме, события должны появиться в вашем отчете в течение нескольких часов.

+0

Я попытался зарегистрировать событие из фонового процесса моего приложения и получил следующий журнал на консоли: «Исключение задачи в рабочем потоке: java.lang.IllegalStateException: FirebaseApp с именем [DEFAULT] не существует. : com.google.android.gms.measurement.internal.zzt.zzbqq (Неизвестный источник) ' – Siddharth2092

Смежные вопросы