导出用户

导出 Firebase 用户到 Excel

本示例使用 Firebase Admin SDK 从 Firebase 中导出用户信息,并通过 EasyExcelUtils 工具类将数据导出为 Excel 文件。

示例代码

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;

import org.junit.Test;

import com.google.firebase.auth.ExportedUserRecord;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseAuthException;
import com.google.firebase.auth.ListUsersPage;
import com.litongjava.db.activerecord.Record;
import com.litongjava.open.chat.config.FirebaseAppConfiguration;
import com.litongjava.table.utils.EasyExcelUtils;
import com.litongjava.tio.utils.environment.EnvUtils;

public class FirebaseUsersTest {

  @Test
  public void exportUsers() {

    // 加载环境变量(如 Firebase 配置)
    EnvUtils.load();

    // 初始化 Firebase 应用配置
    try {
      new FirebaseAppConfiguration().config();
    } catch (IOException e) {
      e.printStackTrace();
      return;
    }

    // 初始化 FirebaseAuth 实例,开始获取用户列表
    ListUsersPage page = null;
    FirebaseAuth instance = FirebaseAuth.getInstance();
    try {
      page = instance.listUsers(null);
    } catch (FirebaseAuthException e) {
      e.printStackTrace();
      return;
    }

    // 创建一个列表存储所有用户信息
    List<Record> users = new ArrayList<>();
    while (page != null) {
      for (ExportedUserRecord user : page.getValues()) {
        String uid = user.getUid();
        String email = user.getEmail();
        String displayName = user.getDisplayName();
        // 创建用户记录,将 Firebase 用户信息映射为 Record 对象
        Record record = Record.by("uid", uid)
                             .set("email", email)
                             .set("displayName", displayName);
        users.add(record);
      }
      page = page.getNextPage(); // 获取下一页用户
    }

    // 导出数据到 Excel 文件
    try (OutputStream outputStream = new FileOutputStream("firebase_users.xlsx")) {
      // 使用 EasyExcelUtils 将用户数据写入 Excel 文件
      EasyExcelUtils.write(outputStream, "firebase_users", users);
    } catch (FileNotFoundException e) {
      e.printStackTrace();
    } catch (IOException e1) {
      e1.printStackTrace();
    }
  }
}

代码解释

  1. 环境加载和配置

    • 使用 EnvUtils.load() 来加载项目中的环境变量,这些变量可能包括 Firebase 的配置。
    • FirebaseAppConfiguration().config() 用于初始化 Firebase Admin SDK,以便从 Firebase 获取用户信息。
  2. 获取 Firebase 用户信息

    • 使用 FirebaseAuth.getInstance().listUsers(null) 获取用户信息,这会返回 ListUsersPage,包含用户的分页数据。通过 while 循环遍历所有用户页面,直到所有用户都被处理完毕。
    • 每个用户记录通过 ExportedUserRecord 获取基本信息(例如 UID、邮箱、显示名),并将其存储为 Record 对象。
  3. 导出到 Excel 文件

    • 使用 EasyExcelUtils.write() 方法将用户数据写入 Excel 文件。EasyExcelUtils 是自定义工具类,用于简化 Excel 文件的生成过程。

注意事项

  • 在导出过程中,要确保 Firebase Admin SDK 已经正确配置,并且有权限访问 Firebase 用户数据。
  • Excel 文件路径可以根据需要进行更改。在示例中,文件将被保存为当前工作目录下的 firebase_users.xlsx
  • EasyExcelUtils 是一个自定义工具类,实际项目中可能需要根据具体需求修改,确保它能够正确处理 Record 数据类型并生成 Excel 文件。

这样,你不仅可以导出 Firebase 用户,还能够将其转化为结构化的 Excel 数据,方便后续的数据分析或存档使用。