Firebase Analytics 和崩溃的权限
Posted
技术标签:
【中文标题】Firebase Analytics 和崩溃的权限【英文标题】:Permissions for Firebase Analytics and Crash 【发布时间】:2016-11-27 04:26:40 【问题描述】:我用过
//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" />
第一个块中的“应用测量运行的可选权限”是什么意思?删除它也安全吗?
【问题讨论】:
【参考方案1】:Firebase Analytics 使用 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
权限,请参阅此related answer。
我怀疑删除任何权限是否安全。您可以通过在没有它们的情况下运行并查看分析是否报告任何事件来找出答案。
【讨论】:
【参考方案2】:是的,您可以同时删除它们,它们不是必要的。同样在 google sample 没有授予这两个权限。
根据documentation:
Firebase Analytics 可帮助您了解人们如何使用您的 ios 或 安卓应用。 SDK 会自动捕获大量事件和 用户属性,还允许您定义自己的自定义事件 衡量对您的业务具有独特意义的事物。一旦 数据被捕获,它可以通过 Firebase 在仪表板中使用 安慰。此仪表板提供有关您的数据的详细见解 - 从活跃用户和人口统计等汇总数据到更多 详细数据,例如识别您最常购买的商品。
另外,观看 this 视频可能会让您对测量有更好的了解。
【讨论】:
【参考方案3】:请注意,“可选权限”仅指 WAKE_LOCK 而不是 c2dm.permission.RECEIVE。
“可选权限”来自 firebase-analytics 的中间文件夹的清单。 (\build\intermediates\exploded-aar\com.google.firebase\firebase-analytics)。
请注意,对于版本 10.0.1(我使用的版本),WAKE_LOCK 权限不再是可选的。 Wakelock 不再显示“运行应用测量的可选权限”。
删除 WAKE_LOCK 权限将导致a lot of crashes。
至于其他权限。根据https://groups.google.com/d/msg/firebase-talk/CXgecSxgsRE/84PsoyTKGgAJC2D_MESSAGE 的 Doug Stevenson 所说,c2dm.permission.RECEIVE 很重要。
事实证明,那些看似仅与消息传递相关的其他权限实际上被分析和其他 Firebase 组件间接使用。原因是他们需要生成需要定期轮换的安全令牌。这由实例 ID 库处理,您可以在此处阅读:https://developers.google.com/instance-id/
...它们对于确保 Firebase 组件正常工作很重要)。有人告诉我,Analytics、Crash Reporting 和 Remote Config 目前都在使用这些令牌
【讨论】:
我在我的项目中找不到 Manifest 文件,我从哪里得到它?以上是关于Firebase Analytics 和崩溃的权限的主要内容,如果未能解决你的问题,请参考以下文章
当未加载/被广告拦截器阻止时,firebase_analytics 使 Flutter Web 应用程序崩溃
Google Admob 和 Firebase with Analytics 需要哪些权限?
在项目 SDK Cocoa Touch 框架中使用 Firebase Analytics 时崩溃
一起使用 Google Analytics SDK 和 Firebase SDK