根据Google的开发者指南在我的应用程序中实现Firebase,我注意到Android Lint会发出警告。
思路是我们必须实现两个继承自Firebase服务的服务:
public class MyFirebaseInstanceIDService extends FirebaseInstanceIdService { ... }
public class MyFirebaseMessagingService extends FirebaseMessagingService { ... }
然后在清单文件中注册这些服务。但是,它并不完美。特别是,这两个推荐的AndroidManifest.xml服务条目不包含任何特殊权限:
and then register those services in the manifest. But, it's not quite perfect. In particular, these two recommended AndroidManifest.xml service entries do not contain any special permissions:
<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>
因此,代码检查工具提示:
导出服务(指设置了exported=true或包含intent-filter但未指定exported=false的服务)应定义实体必须拥有的权限才能启动服务或绑定到其上。如果没有这个权限,任何应用程序都可以使用此服务。
那么我只需向每个服务标签添加此属性,就可以完成吗?
tools:ignore="ExportedService"
还有没有更好的方法来处理这种情况?我的意思是,像这样暴露这些特定的Firebase衍生服务是否安全?