You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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的服务配置补全属性:
    <service
      android:name="io.invertase.firebase.messaging.RNFirebaseMessagingService"
      android:exported="false">
      <intent-filter>
        <action android:name="com.google.firebase.MESSAGING_EVENT" />
      </intent-filter>
    </service>
    
    如果你有自定义的消息监听服务、推送点击跳转Activity,也需要对应补全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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 21:15:06