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上如果该弹窗存在兼容问题无法弹出,后续逻辑会永远等待弹窗回调,直接卡住。
修复方案
- 添加全局错误捕获兜底
把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() }, []) - 优化
anonymousSignIn()逻辑
不要把匿名登录作为进入应用的前置必要条件,登录失败可以走游客模式,仅在需要用户身份的功能点再触发登录逻辑,避免非核心逻辑阻塞主流程。 - 补充兼容测试与兜底
- 找一台iOS 15.1的真机做完整测试,不要仅依赖高版本模拟器/TestFlight测试
- 给弹窗逻辑增加超时兜底:如果弹窗弹出10秒未收到用户操作,自动跳过继续执行后续流程,避免审核人员未及时操作导致卡住。
- 申诉辅助
如果修改后仍被拒,可附上你端内iOS 15.1设备的正常运行录屏,请求审核团队提供更详细的错误日志。
内容的提问来源于stack exchange,提问作者SoF
相关产品推荐
相关产品推荐

