Flutter Firebase Admin 功能互操作插件firebase_admin_interop的使用

Flutter Firebase Admin 功能互操作插件 firebase_admin_interop 的使用

安装

  1. 在项目的 pubspec.yaml 文件中添加 firebase_admin_interop 作为依赖:
dependencies:
  firebase_admin_interop: [latest_version]

运行以下命令以获取依赖项:

pub get
  1. 创建一个 package.json 文件以安装此库所需的 Node.js 模块:
{
  "dependencies": {
    "firebase-admin": "8.5.0",
    "@google-cloud/firestore": "2.0.0"
  }
}

然后运行以下命令来安装这些模块:

npm install

使用

以下是一个简单的使用实时数据库客户端的示例:

import 'dart:async';
import 'package:firebase_admin_interop/firebase_admin_interop.dart';

Future<void> main() async {
  // 提供服务账户密钥文件路径
  final serviceAccountKeyFilename = '/absolute/path/to/service-account.json';
  
  // 初始化 FirebaseAdmin 实例
  final admin = FirebaseAdmin.instance;
  
  // 加载服务账户密钥
  final cert = admin.certFromPath(serviceAccountKeyFilename);
  
  // 初始化 Firebase 应用程序
  final app = admin.initializeApp(new AppOptions(
    credential: cert,
    databaseURL: "YOUR_DB_URL", // 替换为您的数据库 URL
  ));
  
  // 获取数据库引用
  final ref = app.database().ref('/test-path');
  
  // 向数据库写入数据到 "/test-path" 路径
  await ref.setValue("Hello world");
  
  // 从同一数据库位置读取数据
  var snapshot = await ref.once("value");
  
  // 打印读取的数据
  print(snapshot.val()); // 输出 "Hello world".
}

注意:在使用实时数据库时,只能使用与 JSON 兼容的值。这包括所有原始类型(如 intdoublebool)、字符串(String)以及任何 ListMap 实例。

对于 Firestore,还支持更多数据类型,例如 DateTimeGeoPoint

构建

该库依赖于 node_interop 包,它提供了 Node.js 绑定,并且 build_node_compilers 包允许将 Dart 应用程序编译为 Node.js 模块。

为了启用由 build_node_compilers 提供的构建器,首先在 pubspec.yaml 中添加以下开发依赖项:

dev_dependencies:
  build_runner: ^1.0.0
  build_node_compilers: ^0.2.0

接下来,在项目根目录下创建一个 build.yaml 文件,内容如下:

targets:
  $default:
    sources:
      - "lib/**"
      - "node/**" # 假设主 Dart 文件位于 node/ 文件夹中(推荐)
      - "test/**"
    builders:
      build_node_compilers|entrypoint:
        options:
          compiler: dart2js # 默认使用 dart2js 编译

现在可以使用 build_runner 来构建项目:

# 默认使用 DDC 编译
pub run build_runner build --output=build

# 使用 dart2js 编译
pub run build_runner build \
  --define="build_node_compilers|entrypoint=compiler=dart2js" \
  --define="build_node_compilers|entrypoint=dart2js_args=[\"--minify\"]" \ # 可选,对生成的代码进行压缩
  --output=build/

状态

该库被认为是稳定的,尽管功能尚未完全完成。建议查看开发版本以获取最新的更新和错误修复。

确保在每次发布后检查 CHANGELOG.md,所有重要的更改和升级说明都会在其中描述。

当前实现的覆盖报告如下:

  • ✅ admin
  • ✅ admin.auth
  • ✅ admin.app
  • ✅ admin.credential
  • ✅ admin.database
  • ✅ admin.firestore
  • ✅ admin.messaging
  • ❌ admin.storage

特性和问题

有关功能请求和错误报告,请访问 GitHub issue 追踪器


示例代码

以下是从官方仓库中提取的完整示例代码:

import 'package:firebase_admin_interop/firebase_admin_interop.dart';

main() async {
  // 提供服务账户密钥文件路径
  final serviceAccountKeyFilename = '/absolute/path/to/service-account.json';
  
  // 初始化 FirebaseAdmin 实例
  final admin = FirebaseAdmin.instance;
  
  // 加载服务账户密钥
  final cert = admin.certFromPath(serviceAccountKeyFilename);
  
  // 初始化 Firebase 应用程序
  final app = admin.initializeApp(new AppOptions(
    credential: cert,
    databaseURL: "YOUR_DB_URL", // 替换为您的数据库 URL
  ));
  
  // 获取数据库引用
  final ref = app.database().ref('/test-path');
  
  // 向数据库写入数据到 "/test-path" 路径
  await ref.setValue("Hello world");
  
  // 从同一数据库位置读取数据
  var snapshot = await ref.once("value");
  
  // 打印读取的数据
  print(snapshot.val()); // 输出 "Hello world".
}

更多关于Flutter Firebase Admin 功能互操作插件firebase_admin_interop的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter Firebase Admin 功能互操作插件firebase_admin_interop的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


firebase_admin_interop 是一个用于在 Flutter 应用中与 Firebase Admin SDK 进行互操作的插件。它允许你在 Flutter 应用中使用 Dart 代码执行 Firebase Admin SDK 的功能,例如管理用户、验证令牌、发送通知等。

1. 安装插件

首先,你需要在 pubspec.yaml 文件中添加 firebase_admin_interop 依赖:

dependencies:
  flutter:
    sdk: flutter
  firebase_admin_interop: ^2.0.0

然后运行 flutter pub get 来安装依赖。

2. 初始化 Firebase Admin SDK

在使用 firebase_admin_interop 之前,你需要初始化 Firebase Admin SDK。通常,你需要提供一个服务账号的 JSON 文件来进行身份验证。

import 'package:firebase_admin_interop/firebase_admin_interop.dart';

void main() async {
  // 初始化 Firebase Admin SDK
  var admin = FirebaseAdmin.instance;
  var app = admin.initializeApp(
    AppOptions(
      credential: admin.certFromPath('path/to/serviceAccountKey.json'),
    ),
  );

  // 现在你可以使用 Firebase Admin SDK 的功能
  var auth = app.auth();
  var firestore = app.firestore();
}

3. 使用 Firebase Auth

你可以使用 firebase_admin_interop 来管理用户,例如创建用户、删除用户、获取用户信息等。

void createUser() async {
  var userRecord = await auth.createUser(
    CreateUserRequest(
      email: 'user@example.com',
      password: 'password123',
    ),
  );
  print('Created user: ${userRecord.uid}');
}

4. 使用 Firestore

你可以使用 firebase_admin_interop 来操作 Firestore 数据库。

void addDataToFirestore() async {
  var docRef = firestore.collection('users').doc('user1');
  await docRef.set({
    'name': 'John Doe',
    'age': 30,
  });
  print('Data added to Firestore');
}

5. 验证 ID 令牌

你可以使用 firebase_admin_interop 来验证 Firebase ID 令牌。

void verifyIdToken(String idToken) async {
  try {
    var decodedToken = await auth.verifyIdToken(idToken);
    print('Decoded token: $decodedToken');
  } catch (e) {
    print('Error verifying ID token: $e');
  }
}

6. 发送通知

你可以使用 firebase_admin_interop 来发送 Firebase Cloud Messaging (FCM) 通知。

void sendNotification() async {
  var message = Message(
    notification: Notification(
      title: 'Hello',
      body: 'This is a test message',
    ),
    token: 'device_token',
  );

  var response = await app.messaging().send(message);
  print('Message sent: ${response.messageId}');
}

7. 错误处理

在使用 firebase_admin_interop 时,确保处理可能出现的错误,例如网络错误、权限不足等。

void handleErrors() async {
  try {
    var userRecord = await auth.getUser('user_uid');
    print('User: ${userRecord.email}');
  } catch (e) {
    print('Error fetching user: $e');
  }
}
回到顶部