Android12(targetSdk31)下MyFirebaseMessagingService需指定android:exported
解决targetSdkVersion升级到31后Firebase Messaging Service的exported属性错误
Android 12(API 31)开始强制要求:所有带有<intent-filter>的组件(Service、Activity、BroadcastReceiver等)必须显式声明android:exported属性,用来明确控制组件是否允许被其他应用调用。
你只需要在AndroidManifest.xml中找到对应的Firebase消息服务标签,添加android:exported属性即可:
修改前的代码示例:
<service android:name="crc64572fdef0b95375c7.MyFirebaseMessagingService"> <intent-filter> <action android:name="com.google.firebase.MESSAGING_EVENT" /> </intent-filter> </service>
修改后的代码:
<service android:name="crc64572fdef0b95375c7.MyFirebaseMessagingService" android:exported="false"> <intent-filter> <action android:name="com.google.firebase.MESSAGING_EVENT" /> </intent-filter> </service>
属性值选择说明:
- 一般情况下,Firebase消息服务只需要接收Firebase官方的消息推送,不需要对外部应用开放,所以设置
android:exported="false"是更安全的选择。 - 只有当你的应用存在其他外部应用需要和该Service交互的场景时,才需要设置
android:exported="true",这种情况极少出现。
内容的提问来源于stack exchange,提问作者harry_mitch
相关产品推荐
相关产品推荐

