Журнал событий аналитики Firebase в многопроцессорном приложении

Я интегрировал аналитику Firebase в свое приложение, которое состоит из двух процессов:Фон процесс иUI процесс. Что я испытал при использовании Firebase, так это то, что я могу регистрировать события изUI процесс, но не изФон процесс.

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

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

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

Ответы на вопрос(2)

ровали свое приложение на устройстве с помощью сервисов Google Play или на эмуляторе без сервисов Google Play. Перехват вывода logcat с включенным ведением журнала отладки позволил бы ответить на большинство из этих вопросов.

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

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

 Siddharth209218 июл. 2016 г., 11:54
Я попытался записать событие из фонового процесса моего приложения и получил следующий журнал в консоли:Task exception on worker thread: java.lang.IllegalStateException: FirebaseApp with name [DEFAULT] doesn't exist. : com.google.android.gms.measurement.internal.zzt.zzbqq(Unknown Source)
Решение Вопроса

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

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

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

Немного более сложным может быть то, как сделать так, чтобы это вызывалось только один раз и только во втором процессе. Один из подходов состоит в том, чтобы имитировать то, что делает сам Firebase для первого процесса (черезМанифест слияния) - определить 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 гарантирует, что код выполняется перед всем остальным во время инициализации процесса и только в указанном вами процессе.

 Uli22 авг. 2016 г., 19:02
Надеюсь, это сработает для вас! Я сам использую этот шаблон для инициализации Firebase как можно раньше во втором процессе.
 Siddharth209222 авг. 2016 г., 17:50
Спасибо за ответ @ Uli Обязательно попробую.
 Uli25 авг. 2016 г., 23:24
Я сделал небольшую модификацию примера, чтобы обойти временную ошибку фреймворка, с которой я столкнулся во время тестирования (ContentProvider инициализировался несколько раз):code.google.com/p/android/issues/detail?id=172655

Ваш ответ на вопрос