Expo预览构建中Sentry无法记录事件,但开发模式正常
问题概述
在Expo托管工作流中使用sentry-expo@~7.0.0,本地开发模式、expo start --no-dev --minify模式下Sentry都能正常捕获事件,但通过EAS构建预览版后,Sentry初始化成功(onReady触发),beforeSend也能捕获到事件,但事件完全没出现在Sentry后台面板中。
依赖配置
"dependencies": { "sentry-expo": "~7.0.0", "expo": "^52.0.27", }
Sentry初始化代码
import * as Sentry from '@sentry/react-native'; import { Alert } from 'react-native'; Sentry.init({ dsn: 'https://a18559a4e743489f8b57247563fe3..........', enableInExpoDevelopment: true, debug: true, // 开启调试但无错误日志输出 enableAutoSessionTracking: true, onReady: (props) => Alert.alert('Sentry Ready'), // 弹窗出现,确认初始化成功 beforeSend(event) { Alert.alert("🔥 Event being sent to Sentry:", JSON.stringify(event, null, 2)); return event; }, }); // 测试错误日志 Sentry.captureException(new Error("Test error from preview build"));
已确认现象
expo start运行时,事件正常同步到Sentry后台expo start --no-dev --minify运行时同样正常- 预览构建中Sentry初始化完成,
beforeSend触发确认事件已被捕获,但后台无记录
可能的原因及修复方案
1. 检查EAS构建的环境变量配置
EAS预览构建可能未正确注入Sentry配置,导致事件无法正常发送:
- 在
eas.json的预览环境中添加Sentry相关环境变量:
{ "build": { "preview": { "env": { "SENTRY_DSN": "https://a18559a4e743489f8b57247563fe3..........", "SENTRY_ENVIRONMENT": "preview" } } } }
- 初始化时优先读取环境变量(避免硬编码可能的构建替换问题):
dsn: process.env.SENTRY_DSN || '你的备用DSN', environment: process.env.SENTRY_ENVIRONMENT || 'production'
2. 关联Sentry Release与构建版本
EAS构建会生成唯一的Release版本,Sentry需要正确关联才能显示事件:
- 在
app.json中配置发布通道:
{ "expo": { "releaseChannel": "preview" } }
- 初始化时指定Release标识(需导入
expo-constants):
import Constants from 'expo-constants'; Sentry.init({ // ...其他配置 release: `${Constants.expoConfig.version}@${Constants.expoConfig.releaseChannel}` });
3. 检查Sentry后台的过滤规则
可能后台的环境过滤隐藏了预览版事件:
- 登录Sentry后台,进入项目【Settings】→【Filters】,检查是否有针对
preview环境的过滤规则 - 在事件列表中切换环境选项,确认是否选中了
preview(默认可能只显示production环境)
4. 验证设备网络与权限
预览设备可能无法访问Sentry API:
- 测试设备能否正常访问你的DSN对应的域名(如
https://sentry.io/) - 安卓设备需确认
app.json中包含网络权限:
{ "expo": { "android": { "permissions": ["INTERNET"] } } }
5. 排查版本兼容性
当前sentry-expo@~7.0.0可能与Expo 52存在适配问题,尝试升级到兼容版本:
npm install sentry-expo@latest
(Expo 52推荐的sentry-expo版本通常为^8.0.0及以上)
6. 查看设备日志定位发送失败原因
开启debug: true后,预览构建的日志需通过设备查看:
- iOS:使用Xcode控制台搜索
sentry相关日志 - 安卓:执行
adb logcat | grep sentry命令,查看是否有发送失败的错误(如401未授权、网络超时等)
内容的提问来源于stack exchange,提问作者Deepak Yadav
相关产品推荐
相关产品推荐

