React Native中Firebase Analytics自定义维度出现(not set)的排查咨询
React Native Firebase Analytics 自定义属性偶现 (not set) 问题排查
我们开发了一款React Native应用,采用Firebase Analytics进行数据统计,整体功能运行正常。已配置SubMenu和CustomData两个自定义维度,统计数据已超过24小时。
多数CustomData维度能正常赋值,但部分记录显示为*(not set)。本地测试结果均符合预期,但线上Analytics中出现异常:例如同一汽车品牌Mercedes,部分记录正常显示,部分则显示(not set)*。
相关代码如下:
App.tsx
const FirebaseComponent = () => { const loggedIn = useSelector<RootState>(state => state.auth.loggedIn); const id = useSelector<RootState, number>(state => state.user.id); const customDataName = useSelector<RootState, string>(state => state.user?.customData?.name); React.useEffect(() => { if (loggedIn && id && customDataName) { FirebaseAnalytics.setUserId(id); FirebaseAnalytics.setmyAppUserProperties(customDataName); FirebaseAnalytics.logAppInstanceId(); } }, [loggedIn, id, customDataName]); return null; };
FirebaseAnalytics.module.ts
import { firebase } from "@react-native-firebase/analytics"; analytics = firebase.analytics(); public async setmyAppUserProperties(customDataName: string,) { const networkCarrier = await DeviceInfo.getCarrier(); const networkInformation = await NetInfo.fetch(); this.analytics.setUserProperties({ network_carrier: networkCarrier, network_connection: networkInformation.type, customDataName: customDataName }).catch((err) => console.log('Error when setting user properties: ', err)); }
排查思路与代码调整建议
1. 检查属性设置的时机与条件
- 当前
useEffect的触发条件是loggedIn、id、customDataName同时存在,但如果用户登录后customDataName是异步加载的,可能存在事件触发时属性还未就绪的情况。比如用户登录后,user.customData.name需要从API获取,此时useEffect可能在customDataName为空时已经执行过,后续属性更新后才触发,但之前的事件已经没有带上属性。 - 调整:确保
customDataName确实有值后再发送事件,或者在customDataName更新时,重新触发所有需要该属性的事件(如果之前的事件没有带上)。
2. 异步操作的时序问题
setmyAppUserProperties是异步函数,内部调用了DeviceInfo.getCarrier()和NetInfo.fetch()两个异步方法。如果在这些方法执行完成前,应用发送了其他事件,此时用户属性还未设置完成,事件会带上*(not set)*。- 调整:
- 可以将异步操作的结果缓存,避免每次调用都重新获取;
- 确保在用户属性设置完成后,再允许发送需要该属性的事件,或者在初始化时提前获取这些设备信息。
3. 检查Firebase Analytics的属性映射
- 确认Firebase控制台中自定义维度
CustomData是否正确映射到代码中的customDataName属性名。如果映射错误,会导致部分数据无法正确解析,显示为*(not set)*。 - 注意:Firebase的自定义维度映射是大小写敏感的,确保属性名完全一致。
4. 线上环境的日志与错误捕获
- 当前代码中仅在
setUserProperties失败时打印错误,但线上环境无法直接查看日志。建议集成日志收集工具(如Firebase Crashlytics),将错误信息上报,排查是否存在线上环境特有的错误(如权限问题、设备信息获取失败等)。 - 调整:在
catch块中添加日志上报逻辑,例如:.catch((err) => { console.log('Error when setting user properties: ', err); Crashlytics.recordError(err); });
5. 用户身份标识的一致性
- 同一用户可能存在多个
userId或者instanceId的情况,导致属性设置与事件发送关联到不同的用户实例。检查setUserId是否在用户登录后稳定设置,避免用户切换或重新登录时出现标识混乱。
6. 测试线上环境的属性设置
- 使用Firebase Analytics的DebugView功能,在线上环境中实时查看用户属性的设置情况和事件发送情况。可以通过设置调试设备,跟踪特定用户的属性变化,确认是否存在属性未设置或设置失败的场景。
内容的提问来源于stack exchange,提问作者Anarkie
相关产品推荐
相关产品推荐

