Expo/Supabase iOS应用闲置后出现Network Request failed错误排查
iOS平台闲置后Supabase请求失败+生产白屏排查思路
一、Supabase会话相关排查
- 检查Supabase会话自动刷新机制:确认是否启用
autoRefreshToken,闲置前后打印supabase.auth.session()状态,验证会话是否在闲置后失效。 - 监听会话状态变更:给Supabase auth添加
onAuthStateChange监听,当状态变为SIGNED_OUT或TOKEN_REFRESH_ERROR时,记录日志并尝试重新初始化客户端,避免用失效会话发起请求。 - 校验请求会话携带:检查所有Supabase请求是否正确携带当前会话token,闲置后会话若已清空但未拦截请求,无权限场景可能被iOS网络层判定为请求失败。
二、iOS网络特性相关排查
- 确认后台网络权限:在
app.json的ios.infoPlist中检查是否添加UIBackgroundModes的fetch或remote-notification权限,iOS后台无对应权限会限制网络请求。 - 验证ATS配置:检查
ios.infoPlist里的NSAppTransportSecurity是否允许Supabase域名的HTTPS请求,生产环境证书配置异常可能在闲置后触发ATS校验失败。 - 测试网络切换场景:iOS闲置后可能切换网络(WiFi→蜂窝),检查应用是否监听网络状态变化,未重新初始化Supabase客户端会导致连接失效。
三、Expo构建与原生层排查
- 检查EAS Build参数:查看
eas.json的iOS构建配置,确认是否启用developmentClient等影响网络的原生设置,生产构建是否遗漏Supabase相关原生依赖。 - 核对版本兼容性:确认
package.json中supabase-js、@supabase/supabase-react-native与Expo SDK的版本匹配度,版本不兼容可能引发闲置后底层网络模块异常。 - 清除缓存测试:开发环境执行
expo r -c清除缓存,生产构建时禁用缓存,避免旧原生配置或bundle残留问题。
四、错误捕获与日志增强
- 添加全局错误监听:用React Native的
ErrorUtils.setGlobalHandler捕获未处理错误,给每个Supabase请求添加.catch(),打印请求URL、headers、会话状态等详细信息。 - 启用Supabase debug模式:初始化客户端时添加
{ debug: true }参数,输出所有网络请求日志,定位闲置后请求的异常点。 - 生产日志收集:集成Expo Logger等工具,上传生产环境错误信息,重点收集白屏发生时的会话状态、最后一次请求上下文。
五、生产白屏关联排查
- 确认白屏触发时机:检查白屏是否发生在会话失效后的首次请求失败时,若未处理网络错误导致未捕获异常崩溃,需在全局错误边界中处理异常,避免直接白屏。
- 验证生产bundle完整性:检查生产构建后的bundle是否存在语法错误或依赖缺失,闲置后重新加载bundle可能因缓存或加载失败导致白屏。
- 模拟后台唤醒场景:将应用置于后台数小时后唤醒,逐步排查是会话失效引发请求失败,还是原生网络连接问题导致白屏。
内容的提问来源于stack exchange,提问作者Shalaw Fatah
相关产品推荐
相关产品推荐

