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

React Native iOS正式版启动后卡在启动页 App Store审核被拒求助

核心问题原因

你当前的启动逻辑没有任何错误捕获机制,任何一步异步操作出错/卡住都会直接导致流程中断,永远停在启动页。几个最高概率的触发点如下:

  • 未等待异步初始化完成就调用后续方法:remoteConfig.init()是典型的异步操作(Firebase Remote Config的初始化需要拉取云端配置),你没有加await就直接调用remoteConfig.getAlertMessage().text,此时大概率还没拿到配置,getAlertMessage()返回undefined,读取text属性直接抛出异常,整个splash函数终止运行。
  • anonymousSignIn()逻辑失败无兜底:这是你本次新增的逻辑,也是最可能的触发点:
    • 苹果审核团队的测试网络可能限制了Firebase服务访问,匿名登录请求超时/失败
    • iOS 15上Keychain权限配置不正确,会导致Firebase匿名登录抛出权限异常
    • 你未在Firebase控制台开启匿名登录的iOS端支持
      以上场景都会导致await anonymousSignIn()抛出异常,直接中断流程。
  • 自定义弹窗兼容问题卡住流程:await notificationUtil.alertBeforeNotificationPermission()依赖你自定义的弹窗组件,iOS 15.1上如果该弹窗存在兼容问题无法弹出,后续逻辑会永远等待弹窗回调,直接卡住。

修复方案

  1. 添加全局错误捕获兜底
    把splash函数的所有逻辑包裹在try/catch块中,即使某一步出错,也直接执行兜底跳转逻辑,绝对不要卡启动页,示例修改如下:
    useEffect(() => {
      async function splash() {
        try {
          // 原有逻辑全部放到这里
          await remoteConfig.init() // 补充await
          pushNotification()
          const message = remoteConfig.getAlertMessage()?.text || '' // 加可选链避免报错
          await notificationUtil.alertBeforeNotificationPermission(message, permission)
          await anonymousSignIn()
          const response = await getData() // 改用await写法,避免嵌套then的异常无法捕获
          const lastViewedWord = await AsyncStorage.getItem("lastViewedWord")
          const page = await initializeUtil.getPageNameToVisit()
          navigation.reset({
            index: 0,
            routes: [{
              name: page, params: {
                lastViewedWord: lastViewedWord,
                allData: response,
              }
            }]
          })
        } catch (err) {
          // 错误兜底:直接跳首页,可新增错误埋点上报方便后续排查
          console.error('Splash error: ', err)
          navigation.reset({
            index: 0,
            routes: [{ name: 'Home' }] // 替换为你的首页路由名
          })
        }
      }
      splash()
    }, [])
    
  2. 优化anonymousSignIn()逻辑
    不要把匿名登录作为进入应用的前置必要条件,登录失败可以走游客模式,仅在需要用户身份的功能点再触发登录逻辑,避免非核心逻辑阻塞主流程。
  3. 补充兼容测试与兜底
    • 找一台iOS 15.1的真机做完整测试,不要仅依赖高版本模拟器/TestFlight测试
    • 给弹窗逻辑增加超时兜底:如果弹窗弹出10秒未收到用户操作,自动跳过继续执行后续流程,避免审核人员未及时操作导致卡住。
  4. 申诉辅助
    如果修改后仍被拒,可附上你端内iOS 15.1设备的正常运行录屏,请求审核团队提供更详细的错误日志。

内容的提问来源于stack exchange,提问作者SoF

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 09:36:04