Разрешения для Firebase Analytics и Crash

Я использовал

//Analytics
compile 'com.google.firebase:firebase-core:9.2.1'
// Crash
compile 'com.google.firebase:firebase-crash:9.2.1'

и получил тех парней в моем сгенерированном манифесте:

<!-- Required permission for App measurement to run. -->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<!-- Optional permission for App measurement to run. -->
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />

Тогда у нас есть следующий блок

<permission
    android:name="my.package.name.permission.C2D_MESSAGE"
    android:protectionLevel="signature" />
<uses-permission android:name="my.package.name.permission.C2D_MESSAGE" />

Мои вопросы:

Если я использую только Firebase Analytics и Crash и мне не нужны никакие функции обмена сообщениями, можно ли удалить второй блок следующим образом:

<uses-permission android:name="my.package.name.permission.C2D_MESSAGE" tools:node="remove" />

Что означает "Необязательное разрешение для запуска измерения приложения" в первом блоке? Безопасно ли удалить это тоже?

3 ответа

Firebase Analytics использует FirebaseInstanceId, Это можно увидеть, запустив задачу зависимостей в окне инструмента Android Studio для Gradle. Эта часть вывода показывает зависимость от FirebaseInstanceId:

+--- com.google.firebase:firebase-core:9.2.1
|    \--- com.google.firebase:firebase-analytics:9.2.1
|         +--- com.google.android.gms:play-services-basement:9.2.1
|         |    \--- com.android.support:support-v4:24.1.0
|         |         \--- LOCAL: internal_impl-24.1.0.jar
|         +--- com.google.firebase:firebase-common:9.2.1
|         |    +--- com.google.android.gms:play-services-basement:9.2.1
|         |    |    \--- com.android.support:support-v4:24.1.0
|         |    |         \--- LOCAL: internal_impl-24.1.0.jar
|         |    \--- com.google.android.gms:play-services-tasks:9.2.1
|         |         \--- com.google.android.gms:play-services-basement:9.2.1
|         |              \--- com.android.support:support-v4:24.1.0
|         |                   \--- LOCAL: internal_impl-24.1.0.jar
|         \--- com.google.firebase:firebase-analytics-impl:9.2.1
|              +--- com.google.android.gms:play-services-basement:9.2.1
|              |    \--- com.android.support:support-v4:24.1.0
|              |         \--- LOCAL: internal_impl-24.1.0.jar
|              +--- com.google.firebase:firebase-iid:9.2.1  <== FirebaseInstanceId
|              |    +--- com.google.android.gms:play-services-basement:9.2.1
|              |    |    \--- com.android.support:support-v4:24.1.0
|              |    |         \--- LOCAL: internal_impl-24.1.0.jar
|              |    \--- com.google.firebase:firebase-common:9.2.1
|              |         +--- com.google.android.gms:play-services-basement:9.2.1
|              |         |    \--- com.android.support:support-v4:24.1.0
|              |         |         \--- LOCAL: internal_impl-24.1.0.jar
|              |         \--- com.google.android.gms:play-services-tasks:9.2.1
|              |              \--- com.google.android.gms:play-services-basement:9.2.1
|              |                   \--- com.android.support:support-v4:24.1.0
|              |                        \--- LOCAL: internal_impl-24.1.0.jar
|              \--- com.google.firebase:firebase-common:9.2.1
|                   +--- com.google.android.gms:play-services-basement:9.2.1
|                   |    \--- com.android.support:support-v4:24.1.0
|                   |         \--- LOCAL: internal_impl-24.1.0.jar
|                   \--- com.google.android.gms:play-services-tasks:9.2.1
|                        \--- com.google.android.gms:play-services-basement:9.2.1
|                             \--- com.android.support:support-v4:24.1.0
|                                  \--- LOCAL: internal_impl-24.1.0.jar

C2D_MESSAGE разрешение исходит из манифеста, связанного с firebase-iid библиотека. Я предполагаю, что без него FirebaseAnalytics не сможет получить уникальный идентификатор для устройства и не сможет сообщать данные.

Учитывая WAKE_LOCK разрешение, см. этот связанный ответ.

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

Да, вы можете удалить их обоих, и они не нужны. Также в примере Google нет этих двух разрешений.

Согласно документации:

Firebase Analytics помогает вам понять, как люди используют ваше приложение для iOS или Android. SDK автоматически фиксирует ряд событий и пользовательских свойств, а также позволяет вам определять свои собственные пользовательские события, чтобы измерить вещи, которые имеют уникальное значение для вашего бизнеса. После того, как данные собраны, они становятся доступны на панели инструментов через консоль Firebase. Эта информационная панель предоставляет подробные сведения о ваших данных - от сводных данных, таких как активные пользователи и демографические данные, до более подробных данных, таких как идентификация ваших самых покупаемых предметов.

Также просмотр этого видео может дать вам лучшее представление об измерении.

Обратите внимание, что "Дополнительное разрешение" относится только к WAKE_LOCK, а не к c2dm.permission.RECEIVE.

"Необязательное разрешение" является производным от манифеста промежуточной папки для firebase-analytics. (\ Сборка \ промежуточные \ разобранный-AAR \com.google.firebase\firebase-аналитика).

Обратите внимание, что для версии 10.0.1 (используемой версии) разрешение WAKE_LOCK больше не является обязательным. Wakelock больше не отображает "Дополнительное разрешение для запуска измерения приложения".

удаление разрешения WAKE_LOCK приведет к большому количеству сбоев.

Что касается других разрешений. По словам Дуга Стивенсона на https://groups.google.com/d/msg/firebase-talk/CXgecSxgsRE/84PsoyTKGgAJ C2D_MESSAGE и c2dm.permission.RECEIVE очень важны.

оказывается, что те другие разрешения, которые имеют отношение только к обмену сообщениями, фактически используются косвенно аналитикой и другими компонентами Firebase. Причина в том, что им нужно генерировать безопасные токены, которые нужно периодически менять. Это обрабатывается библиотекой идентификаторов экземпляров, о которой вы можете прочитать здесь: https://developers.google.com/instance-id/

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

Другие вопросы по тегам