Firebase 总用户数

Posted

技术标签:

【中文标题】Firebase 总用户数【英文标题】:Firebase total user count 【发布时间】:2016-03-09 14:20:20 【问题描述】:

有没有办法在 firebase 中获取所有用户的计数? (通过密码、facebook、twitter 等进行身份验证)所有社交和电子邮件和密码身份验证用户的总数。

【问题讨论】:

【参考方案1】:

没有内置方法可以获取用户总数。

您可以保留 userIds 的索引并将它们拉下来并计算它们。但是,这需要下载所有数据才能获得计数。


  "userIds": 
    "user_one": true,
    "user_two": true,
    "user_three": true 
  

那么在下载数据的时候可以调用snapshot.numChildren():

var ref = new Firebase('<my-firebase-app>/userIds');
ref.once('value', function(snap) 
  console.log(snap.numChildren());
);

如果您不想下载数据,可以使用transactions 维护总计数。

var ref = new Firebase('<my-firebase-app>');
ref.createUser( email: '', password: '', function() 
  var userCountRef = ref.child('userCount');
  userCountRef.transaction(function (current_value) 
    // increment the user count by one
    return (current_value || 0) + 1;
  );
);

然后你就可以实时监听用户了:

var ref = new Firebase('<my-firebase-app>/userCount');
ref.on('value', function(snap) 
  console.log(snap.val());
);

【讨论】:

所以你说我不能真正依赖 firebase 的用户身份验证系统,我必须创建一些东西来保存新的用户 ID。我理解正确吗? Firebase 身份验证仅适用于对用户进行身份验证。如果您想对这些数据进行操作,请将其存储在 Firebase 数据库中。 好的,很公平。我希望至少可以访问所有用户 ID 或类似的东西:) 我接受这个作为答案 对于交易,你无法确定用户(黑客)如何操纵数字【参考方案2】:

使用Cloud Functions:

exports.updateUserCount = functions.auth.user().onCreate(user => 
  return admin.database().ref('userCount').transaction(userCount => (userCount || 0) + 1);
);

请注意,当使用自定义令牌创建用户时,不会触发 Cloud Functions 事件。在这种情况下,您需要执行以下操作:

exports.updateUserCount = functions.database.ref('users/userId').onCreate(() => 
  return admin.database().ref('userCount').transaction(userCount => (userCount || 0) + 1);
);

【讨论】:

【参考方案3】:

2021 年更新

偶然发现了这个问题,想分享三种获取注册用户总数的方法。

? 在控制台中查看

进入console,在Authentication标签下,可以直接读取用户列表下的用户数: 56个用户!耶!

? 使用管理 SDK

对于通过提供者类型、注册日期、上次连接日期等潜在过滤器以编程方式访问用户数量...您可以编写一个利用 listUsers from the admin SDK 的脚本。 例如,统计自 3 月 16 日以来注册的用户:

const admin = require("firebase-admin");
const serviceAccount = require("./path/to/serviceAccountKey.json");
admin.initializeApp( credential: admin.credential.cert(serviceAccount) );

async function countUsers(count, nextPageToken) 
    const listUsersResult = await admin.auth().listUsers(1000, nextPageToken);

    listUsersResult.users.map(user => 
        if (new Date(user.metadata.creationTime) > new Date("2021-03-16T00:00:00")) 
            count++;
        
    );

    if (listUsersResult.pageToken) 
        count = await countUsers(count, listUsersResult.pageToken);
    

    return count;


countUsers(0).then(count => console.log("total: ", count));

?在数据库中存储用户

您的应用可能已经将用户文档存储在 Firestore、实时数据库或任何其他数据库中。您可以统计这些记录以获取注册用户总数。 (如果您使用 Firestore,您可以阅读 my article 了解如何计算文档)

【讨论】:

【参考方案4】:

这是一个用于此目的的 javascript 模块 - https://gist.github.com/ajaxray/17d6ec5107d2f816cc8a284ce4d7242e

在单行中,它的作用是 -

在 Firebase 网络应用中保留在线用户列表(和计数) - 按隔离房间或全球范围

用于统计所有使用此模块的用户 -

firebase.initializeApp(...);
var onlineUsers = new Gathering(firebase.database());
gathering.join();

// Attach a callback function to track updates
// That function will be called (with the user count and array of users) every time user list updated
gathering.onUpdated(function(count, users) 
    // Do whatever you want
);

【讨论】:

以上是关于Firebase 总用户数的主要内容,如果未能解决你的问题,请参考以下文章

Firebase iOS SDK - 计算连接用户

为啥注册用户后 Firebase 实时数据库用户 ID 与 Firebase 身份验证 UID 不匹配?

firebase 登录用户是不是被视为并发用户?

Firebase:相同的用户名

如何从 Firebase 获取本地用户或当前用户的用户名?

为啥注册用户未在 Firebase 中进行身份验证?为啥用户不能将产品添加到数据库 Firebase?