如何通过Rest Client API从Firebase数据库获取指定全量用户数据
实现一次请求获取所有用户数据并排除指定字段
要通过Firebase REST API在Unity中一次获取所有用户数据并排除Project字段,你可以利用Firebase Realtime Database的字段投影功能,结合Rest Client来实现:
1. 构造请求URL
去掉单个用户的getLocalId路径,直接访问根节点,同时通过fields参数指定需要返回的所有字段(排除Project)。假设你的用户数据包含username、email、avatarUrl等字段,URL格式如下:
databaseURL + ".json?auth=" + idToken + "&fields=username,email,avatarUrl"
如果用户字段较多或不固定,这种方式不方便的话,可以先获取全量数据再在客户端过滤(但会传输更多数据,按需选择)。
2. Unity C#代码实现
使用Rest Client发起GET请求,接收所有用户的字典数据(返回结果为多个用户的键值对):
// 构造请求URL,示例保留username、email字段,排除Project string requestUrl = $"{databaseURL}.json?auth={idToken}&fields=username,email"; RestClient.Get<Dictionary<string, User>>(requestUrl).Then(response => { // response.Data 是所有用户的字典,key为用户localId,value为已排除Project字段的User对象 foreach (var userEntry in response.Data) { string userId = userEntry.Key; User userData = userEntry.Value; // 处理用户数据逻辑 } });
注意:你的
User类需要移除Project属性,或者用[JsonIgnore]标记该属性,否则反序列化时会因API返回无此字段而报错。
备选方案:客户端过滤
如果无法提前确定要保留的字段,或字段频繁变动,可以先获取全量用户数据,再在客户端过滤:
RestClient.Get<Dictionary<string, FullUser>>(databaseURL + ".json?auth=" + idToken).Then(response => { // 转换为排除Project字段的User对象集合 var filteredUsers = response.Data.ToDictionary( entry => entry.Key, entry => new User { Username = entry.Value.Username, Email = entry.Value.Email // 复制其他需要保留的字段 }); // 处理过滤后的用户数据 });
这里FullUser是包含Project字段的完整类,User是排除该字段的精简类。
内容的提问来源于stack exchange,提问作者Savad
相关产品推荐
相关产品推荐

