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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 23:07:45