【问题标题】:Firebase + PermissionsFirebase + 权限
【发布时间】:2016-07-11 13:05:51
【问题描述】:

我刚刚将一个应用从 Firebase 9.0.0 更新到 Firebase 9.0.2。 我使用消息 + 广告。

compile 'com.google.firebase:firebase-messaging:9.0.2' 
compile "com.google.firebase:firebase-ads:9.0.2"

现在出现了很多不需要的权限

android:name="android.permission.READ_PHONE_STATE"
android:name="android.permission.READ_EXTERNAL_STORAGE"
android:name="android.permission.WRITE_EXTERNAL_STORAGE"

我没有在任何地方添加这些权限,因此它们必须来自 Firebase。 我知道我的客户不喜欢这些权限,所以我用

删除了它们
<uses-permission
    android:name="android.permission.READ_PHONE_STATE"
    tools:node="remove" />
<uses-permission
    android:name="android.permission.READ_EXTERNAL_STORAGE"
    tools:node="remove" />
<uses-permission
    android:name="android.permission.WRITE_EXTERNAL_STORAGE"
    tools:node="remove" />

我的应用仍然有效,消息和广告仍然有效,但我仍然希望我的怀疑得到证实。

为什么 Firebase 会添加这些权限,真的可以像我一样删除它们吗?

【问题讨论】:

  • 如果您构建的应用程序只有 firebase-messaging 或 firebase-ads,则这些权限不太可能是由 firebase 添加的。您能否确认当您使用 9.0.0 构建应用时,这些权限不存在,然后在您迁移到 9.0.2(现在是 9.2.1)时出现?
  • @ArthurThompson 我不能再用 9.0.0 构建了。这就是我更新依赖项的原因。当我使用 9.0.0 时,我得到“ java.lang.IncompatibleClassChangeError: The method 'java.io.File android.support.v4.content.ContextCompat.getNoBackupFilesDir(android.content.Context)' is expected to be of type virtual but相反被发现是直接类型('com.google.firebase.iid.zzg' 的声明......“。但我现在更改为 9.2.1,更新了构建工具和其他所有内容,现在它再次工作而不会崩溃并且多余的权限也消失了……
  • 很高兴你把事情整理好了。 Firebase 永远不应添加这些权限。
  • 我遇到了类似的问题。我已按如下方式添加 Firebase:编译 'com.google.firebase:firebase-core:9.6.0',编译 'com.google.firebase:firebase-ads:9.6.0',编译 'com.google.firebase: firebase-invites:9.6.0',编译 'com.google.firebase:firebase-messaging:9.6.0' 并添加 READ_EXTERNAL_STORAGE、WRITE_EXTERNAL_STORAGE、READ_PHONE_STATE、C2D_MESSAGE、RECEIVE 权限。然后我在清单中使用了 tools:node="remove" 并对问题进行了排序,但是删除库添加的权限似乎并不正确。还有什么建议吗?

标签: android permissions firebase admob firebase-cloud-messaging


【解决方案1】:

此问题已在 12.0.1 中修复。来源https://developers.google.com/android/guides/releases

2018 年 3 月 28 日 - 版本 12.0.1

12.0.1 中修复的问题:

  • 修复了导致虚假 Android lint 错误声明的问题 GoogleSignIn 和 CredentialsClient 仅供内部使用。
  • 添加缺失 -license 工件中的 minSdkVersion 以防止自动包含 READ_PHONE_STATE 和 READ_EXTERNAL_STORAGE 权限。
  • 恢复 运行时链接许可证工件的唯一包名称 影响了一些构建系统(例如 Ionic Pro)的兼容性问题。
  • 恢复在 12.0.1 中被混淆的一些字段名称,即 firebase-firestore 中 @PropertyName 注释的 value() 方法和 firebase 数据库。

【讨论】:

    【解决方案2】:
    android:name="android.permission.READ_PHONE_STATE"
    android:name="android.permission.READ_EXTERNAL_STORAGE"
    android:name="android.permission.WRITE_EXTERNAL_STORAGE"
    

    这些权限不同,在 fcm 中没有使用。

    PHONE_STATE 了解手机当前状态的权限

    READ_EXTERNAL_STORAGEWRITE_EXTERNAL_STORAGE 从您的应用中添加和删除内存中的文件,如果您不使用这些功能中的任何一个,则可以将其删除。

    【讨论】:

    • 如果我出现在 Merge Manifest 文件中,如何从项目中删除这些权限?
    • 用 app:node="remove" 添加权限
    • 你在说什么?什么不同的firebase库添加了这些权限(aar的一些问题),自己检查一下
    猜你喜欢
    • 2017-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-15
    • 2017-12-26
    相关资源
    最近更新 更多