alb*_*aun 40 android android-service android-lint firebase firebase-cloud-messaging
根据Google开发人员在我的应用中实施Firebase的说明,我注意到android lint抱怨.
我们的想法是,我们必须实现两个从Firebase服务继承的服务:
public class MyFirebaseInstanceIDService extends FirebaseInstanceIdService { ... }
public class MyFirebaseMessagingService extends FirebaseMessagingService { ... }
Run Code Online (Sandbox Code Playgroud)
然后在清单中注册这些服务.但是,它并不完美.特别是,这两个推荐的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>
Run Code Online (Sandbox Code Playgroud)
所以linter说:
导出的服务(设置为exported = true或包含intent-filter且未指定exported = false的服务)应定义实体必须具有的权限才能启动服务或绑定到该服务.没有这个,任何应用程序都可以使用此服务.
我应该只将此属性添加到每个服务标记并完成它
tools:ignore="ExportedService"
Run Code Online (Sandbox Code Playgroud)
或者在这种情况下有更好的方法吗?我的意思是,公开这些特定的Firebase派生服务是否安全?
Bob*_*der 52
您问: ......公开这些特定的Firebase派生服务是否安全? 如果您信任这些服务的清单文件中的注释.
在Android Studio中,打开应用的AndroidManifest.xml文件.在窗口底部,选择Merged Manifest选项卡.滚动查找条目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>
Run Code Online (Sandbox Code Playgroud)
请注意注释:FirebaseMessagingService在运行时执行安全检查,尽管exports ="true",也不需要显式权限
你也可以这样做FirebaseInstanceIdService
并看到相同的评论.
如果您信任评论(我这样做),您可以安全地忽略lint警告或禁用检查.
小智 7
<service android:name=".java.MyFirebaseMessagingService"
android:exported="false">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
</service>
Run Code Online (Sandbox Code Playgroud)
根据官方代码示例,设置exported=false是安全的
归档时间: |
|
查看次数: |
5375 次 |
最近记录: |