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

如何在Flutter中读取Firebase Authentication的日活跃用户数据

在Flutter应用中展示Firebase日活跃用户数据的方案

方案1:借助Firebase Analytics + BigQuery + Cloud Functions

  • 给Firebase项目关联BigQuery,开启Analytics数据的每日自动导出
  • 在Flutter应用中,每次用户启动APP时,发送自定义事件user_active(可附带用户ID):
    FirebaseAnalytics.instance.logEvent(
      name: 'user_active',
      parameters: {'user_id': FirebaseAuth.instance.currentUser?.uid},
    );
    
  • 在BigQuery中编写SQL查询,统计当日触发user_active事件的唯一用户数:
    SELECT COUNT(DISTINCT user_id) AS daily_active_users
    FROM `your-project-id.analytics_xxxxxx.events_*`
    WHERE event_name = 'user_active'
      AND _TABLE_SUFFIX = FORMAT_DATE('%Y%m%d', CURRENT_DATE())
    
  • 创建Cloud Functions定时任务(每日执行),运行上述查询并将结果写入Firestore的metrics/daily_active_users文档
  • 在Flutter应用中读取该Firestore文档,展示日活数据

方案2:手动维护用户活跃状态(最直接)

  • 在Firestore的用户集合中新增last_active字段(时间戳类型)
  • 在Flutter应用的初始化入口(如首页initState)更新当前用户的活跃时间:
    await FirebaseFirestore.instance
        .collection('users')
        .doc(FirebaseAuth.instance.currentUser?.uid)
        .update({'last_active': FieldValue.serverTimestamp()});
    
  • 查询过去24小时内活跃的用户数:
    final twentyFourHoursAgo = DateTime.now().subtract(Duration(hours: 24));
    final snapshot = await FirebaseFirestore.instance
        .collection('users')
        .where('last_active', isGreaterThan: twentyFourHoursAgo)
        .get();
    final dailyActiveCount = snapshot.size;
    
  • 可选:用Cloud Functions定时任务每日预计算日活数据,存入metrics集合,避免APP端频繁全表查询

方案3:基于Firebase Authentication登录日志统计

  • 创建Cloud Functions的登录触发器,记录用户登录时间到Firestore的user_login_logs集合:
    exports.trackUserLogin = functions.auth.user().onSignIn((user) => {
      return admin.firestore().collection('user_login_logs').add({
        user_id: user.uid,
        login_time: admin.firestore.FieldValue.serverTimestamp()
      });
    });
    
  • 在Flutter端查询过去24小时内的登录记录,去重后得到日活数:
    final twentyFourHoursAgo = DateTime.now().subtract(Duration(hours: 24));
    final snapshot = await FirebaseFirestore.instance
        .collection('user_login_logs')
        .where('login_time', isGreaterThan: twentyFourHoursAgo)
        .get();
    final uniqueUsers = snapshot.docs.map((doc) => doc['user_id']).toSet();
    final dailyActiveCount = uniqueUsers.size;
    
  • 同样可通过定时任务预计算数据,提升APP端性能

内容的提问来源于stack exchange,提问作者ginaa

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 22:29:58