如何使用react-native-splash-screen/bootsplash搭配react-native-firebase/messaging?
适配解决方案
启动屏库选型结论
优先使用react-native-bootsplash即可,无需回退到react-native-splash-screen:后者已停止维护超过3年,未适配Android 12+的官方启动屏API、组件显式导出要求,这就是接入react-native-firebase/messaging后出现适配冲突的核心原因。
Firebase Messaging 故障修复步骤
- 先升级
react-native-firebase相关依赖到适配SDK31的版本,要求@react-native-firebase/app和@react-native-firebase/messaging版本号一致,且不低于14.11.0,执行安装命令:npm i @react-native-firebase/app@14.11.0 @react-native-firebase/messaging@14.11.0 - 修改
android/app/src/main/AndroidManifest.xml配置,SDK31要求所有带intent-filter的组件必须显式声明android:exported属性,找到firebase messaging的服务配置补全属性:
如果你有自定义的消息监听服务、推送点击跳转Activity,也需要对应补全<service android:name="io.invertase.firebase.messaging.RNFirebaseMessagingService" android:exported="false"> <intent-filter> <action android:name="com.google.firebase.MESSAGING_EVENT" /> </intent-filter> </service>android:exported属性,接收外部跳转的页面设为true,内部服务设为false即可。 - 统一项目全局SDK版本配置,修改
android/build.gradle的全局参数,避免子库覆盖版本导致冲突:buildscript { ext { buildToolsVersion = "31.0.0" minSdkVersion = 21 compileSdkVersion = 31 targetSdkVersion = 31 firebaseBomVersion = "30.4.0" } } - 如果后续将targetSdkVersion升到33及以上,需要在启动屏消失后主动申请通知权限,保证推送正常展示:
import { PermissionsAndroid, Platform } from 'react-native'; const requestNotificationPermission = async () => { if (Platform.Version >= 33) { await PermissionsAndroid.request(PermissionsAndroid.PERMISSIONS.POST_NOTIFICATIONS); } }
编译验证
修改完成后先清理安卓构建缓存再编译:cd android && ./gradlew clean && cd .. && npx react-native run-android
先验证推送的前台接收、后台回调、点击跳转逻辑正常,再验证启动屏的展示、隐藏无闪屏/白屏问题即可。
内容的提问来源于stack exchange,提问作者TheWhiteFang
相关产品推荐
相关产品推荐

