8

我用了

//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" />

第一个块中的“应用程序测量运行的可选权限”是什么意思?删除它也安全吗?

4

3 回答 3

5

Firebase 分析使用FirebaseInstanceId. 这可以通过在 Gradle 的 Android Studio 工具窗口中运行依赖项任务来查看。这部分输出显示了对 的依赖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 将无法获得设备的唯一 ID,也无法报告数据。

关于WAKE_LOCK权限,请参阅此相关答案

我怀疑删除任何权限是否安全。您可以通过在没有它们的情况下运行并查看分析是否报告任何事件来找出答案。

于 2016-07-23T14:45:26.317 回答
3

是的,您可以删除它们,它们不是必需的。同样在谷歌示例中,没有授予这两个权限。

根据文件

Firebase Analytics 可帮助您了解人们如何使用您的 iOS 或 Android 应用。SDK 自动捕获大量事件和用户属性,还允许您定义自己的自定义事件来衡量对您的业务具有独特意义的事物。捕获数据后,即可通过 Firebase 控制台在仪表板中使用这些数据。此仪表板提供有关您的数据的详细见解——从活跃用户和人口统计等摘要数据,到识别您最常购买的商品等更详细的数据。

还看到这个视频可能会让你更好地了解测量。

于 2016-07-23T15:03:53.020 回答
2

请注意,“可选权限”仅指 WAKE_LOCK 而不是 c2dm.permission.RECEIVE。

“可选权限”来自 firebase-analytics 的中间文件夹的清单。(\build\intermediates\exploded-aar\com.google.firebase\firebase-analytics)。

在此处输入图像描述

请注意,对于版本 10.0.1(我使用的版本),WAKE_LOCK 权限不再是可选的。唤醒锁不再显示“应用测量运行的可选权限”。

在此处输入图像描述

删除 WAKE_LOCK 权限会导致很多崩溃

至于其他权限。根据 Doug Stevenson 在https://groups.google.com/d/msg/firebase-talk/CXgecSxgsRE/84PsoyTKGgAJ C2D_MESSAGE 和 c2dm.permission.RECEIVE 的说法很重要。

事实证明,那些似乎只与消息传递相关的其他权限实际上被分析和其他 Firebase 组件间接使用。原因是他们需要生成需要定期轮换的安全令牌。这由实例 ID 库处理,您可以在此处阅读:https ://developers.google.com/instance-id/

...它们对于确保 Firebase 组件正常工作很重要)。有人告诉我,Analytics、Crash Reporting 和 Remote Config 今天都在使用这些令牌

于 2017-01-12T15:33:16.023 回答