Firebase 总用户数
Firebase total user count
有没有办法获取 firebase 中所有用户的计数? (通过密码、facebook、twitter 等进行身份验证)所有社交和电子邮件密码经过身份验证的用户总数。
没有获取总用户数的内置方法。
您可以保留一个 userId 索引,然后将它们拉下来并进行计数。但是,这需要下载所有数据才能进行计数。
{
"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());
});
这是用于此目的的 javascript 模块 - https://gist.github.com/ajaxray/17d6ec5107d2f816cc8a284ce4d7242e
在单行中,它的作用是-
Keep list (and count) of online users in a Firebase web app - by isolated rooms or globally
用于计算使用此模块的所有用户 -
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
});
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);
});
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 如何统计文档)
有没有办法获取 firebase 中所有用户的计数? (通过密码、facebook、twitter 等进行身份验证)所有社交和电子邮件密码经过身份验证的用户总数。
没有获取总用户数的内置方法。
您可以保留一个 userId 索引,然后将它们拉下来并进行计数。但是,这需要下载所有数据才能进行计数。
{
"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());
});
这是用于此目的的 javascript 模块 - https://gist.github.com/ajaxray/17d6ec5107d2f816cc8a284ce4d7242e
在单行中,它的作用是-
Keep list (and count) of online users in a Firebase web app - by isolated rooms or globally
用于计算使用此模块的所有用户 -
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
});
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);
});
2021 年更新
我偶然发现了这个问题,想分享三种获取注册用户总数的方法。
查看控制台
进入console,在Authentication标签下,可以直接读取用户列表下的用户数:
使用管理 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 如何统计文档)