如何解决有关导出的 Firebase Messaging 服务实现的 android lint 投诉?

问题描述 投票:0回答:3

按照 Google 开发人员在我的应用程序中实现 Firebase 的说明,我注意到 android lint 抱怨。

我们的想法是,我们必须实现两个继承自 Firebase 服务的服务:

public class MyFirebaseInstanceIDService extends FirebaseInstanceIdService { ... }

public class MyFirebaseMessagingService extends FirebaseMessagingService { ... }

然后在清单中注册这些服务。但是,它还不是很完美。特别是,这两个推荐的 AndroidManifest.xml 服务条目不包含任何特殊权限:

<service android:name=".MyFirebaseMessagingService">
    <intent-filter>
        <action android:name="com.google.firebase.MESSAGING_EVENT"/>
    </intent-filter>
</service>

<service android:name=".MyFirebaseInstanceIDService">
    <intent-filter>
        <action android:name="com.google.firebase.INSTANCE_ID_EVENT"/>
    </intent-filter>
</service>

所以 linter 说:

导出的服务(设置exported=true或包含intent-filter但未指定exported=false的服务)应定义实体必须具有的权限才能启动服务或绑定到该服务。如果没有这个,任何应用程序都可以使用此服务。

我是否应该将此属性添加到每个服务标签并完成它

tools:ignore="ExportedService"

或者在这种情况下有更好的方法吗?我的意思是,像这样公开这些特定的 Firebase 派生服务是否安全?

android firebase android-service firebase-cloud-messaging android-lint
3个回答
57
投票

您会问:...像这样公开这些特定的 Firebase 派生服务是否安全? 如果您信任这些服务的清单文件中的注释,是否安全。

在 Android Studio 中,打开应用的 AndroidManifest.xml 文件。在窗口底部,选择“合并清单”选项卡。滚动查找 FirebaseMessagingService 的条目。双击包含服务名称的行。该服务的清单文件应该打开,您将看到以下内容:


<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.google.firebase.messaging"> <uses-sdk android:minSdkVersion="14"/> <application> <!-- FirebaseMessagingService performs security checks at runtime, no need for explicit permissions despite exported="true" --> <service android:name="com.google.firebase.messaging.FirebaseMessagingService" android:exported="true"> <intent-filter android:priority="-500"> <action android:name="com.google.firebase.MESSAGING_EVENT"/> </intent-filter> </service> </application> </manifest>

注意注释:
FirebaseMessagingService 在运行时执行安全检查,尽管导出为“true”,但不需要显式权限

您可以对

FirebaseInstanceIdService

执行相同的操作并查看相同的评论。


如果您信任这些评论(我相信),您可以安全地忽略 lint 警告或禁用检查。


7
投票
根据官方代码示例,设置exported=false是安全的


0
投票

© www.soinside.com 2019 - 2024. All rights reserved.