Flutter Firebase管理插件firebase_go_admin的使用
Flutter Firebase管理插件firebase_go_admin的使用
Firebase Administration 基于官方的 Firebase Admin GO SDK。
功能
通过此插件,可以将官方的 Firebase Admin GO SDK 暴露给 Dart,从而在服务器上使用该 SDK。
使用前的注意事项
本插件的目的是作为其他实现方式的替代方案,在服务器上部分实现官方的 Firebase Admin SDK。由于目前没有官方的 Firebase Dart Admin SDK,最接近的方法是使用官方的 GO SDK,并通过 FFI(Foreign Function Interface)将其暴露给 Dart。
虽然使用了官方 SDK 提供了额外的信心,但此实现存在一个需要注意的局限性。
尽管 Dart 和 Go 都是垃圾回收平台,但它们之间的通信接口是 C 接口(Dart FFI 耦合 Go 的 CGO)。这意味着会有数据序列化过程发生。主要来说,这表示需要手动分配和释放内存。尽管我们已经非常小心地防止任何内存泄漏,但如果遇到内存泄漏问题,请通过 GitHub 上报问题。
开始使用
1. 添加依赖
首先,将 firebase_go_admin
包添加到项目的 pubspec.yaml
文件中,并运行以下命令来获取依赖项:
dart pub get
2. 安装动态库
此包需要一个动态库文件 firebase_go_admin.so
。您可以在以下路径找到其 GO 源代码:
~/.pub-cache/hosted/pub.dartlang.org/firebase_go_admin-<版本号>/go/
每次升级此包时,您可能需要重新编译最新的动态库并将其复制到您的应用程序中。最简单的方法是执行以下步骤:
确保安装了必要的工具:
- 确保安装 GO SDK:如果尚未安装,请从 https://go.dev/dl/ 下载 GO,最低版本为 1.19.1。
- 确保安装 GCC:Windows 用户可以通过 https://jmeubank.github.io/tdm-gcc/download/ 使用 tdm-gcc。
- 安装 ffi_lib:运行以下命令以全局激活 ffi_lib:
最低要求版本为 1.1.0。dart pub global activate ffi_lib
编译动态库:
- 在应用根目录下运行以下命令,以从包中的 GO 代码编译原生库,并将其复制到包的
bin
子目录中:ffi-lib firebase_go_admin
3. 生成并下载服务账户私钥
根据 https://firebase.google.com/docs/admin/setup 中的说明生成新的私钥文件。
4. 忽略私钥文件
如果您将包含私钥的文件添加到 Git 仓库或其他源代码控制仓库的目录中,请务必将其添加到 .gitignore
文件中,以避免泄露私钥。假设我们将文件重命名为 service-account.json
。
使用方法
完成上述步骤后,您应该可以开始使用 API 了。
初始化 API
在主函数中,我们需要初始化 API。只需要在整个应用程序生命周期内调用一次即可,无论后续创建了多少隔离环境。换句话说,只要在主隔离环境中调用了 initialize
方法,就无需在以后创建的隔离环境中再次调用它。
示例代码如下:
import 'package:firebase_go_admin/firebase_go_admin.dart' as firebase;
void main() {
// 初始化 API,指定服务账户的 JSON 文件路径
firebase.initialize('service-account.json');
// 其余初始化和应用程序运行逻辑
}
注意事项
initialize
方法引用了service-account.json
文件,这是包含私钥的文件。在示例中,我们假设该文件位于搜索路径或应用程序目录下。也可以指定文件的完整绝对路径。initialize
是同步调用。这是此 API 中唯一的同步调用,其余所有调用均为异步。
创建自定义令牌示例
初始化完成后,调用 API 的剩余操作非常简单。例如,以下代码可以帮助我们创建一个自定义令牌:
import 'package:firebase_go_admin/firebase_go_admin.dart' as firebase;
void main() async {
// 初始化 API
firebase.initialize('service-account.json');
// 创建自定义令牌
try {
final customToken = await firebase.auth.createCustomToken('uid1234567890');
print('Custom Token: $customToken');
} catch (e) {
print('Error creating custom token: $e');
}
}
更多关于Flutter Firebase管理插件firebase_go_admin的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter Firebase管理插件firebase_go_admin的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
firebase_go_admin
是一个用于在 Flutter 应用中集成 Firebase Admin SDK 的插件。它允许你在 Flutter 应用中执行通常需要服务器端权限的操作,例如管理用户、读取/写入 Firestore 数据、发送推送通知等。
1. 安装 firebase_go_admin
首先,你需要在 pubspec.yaml
文件中添加 firebase_go_admin
依赖:
dependencies:
flutter:
sdk: flutter
firebase_go_admin: ^0.1.0 # 请检查最新版本
然后运行 flutter pub get
来安装依赖。
2. 初始化 Firebase Admin SDK
在使用 firebase_go_admin
之前,你需要初始化 Firebase Admin SDK。通常,你需要在启动应用时进行初始化。
import 'package:firebase_go_admin/firebase_go_admin.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
// 初始化 Firebase Admin SDK
await FirebaseGoAdmin.initializeApp(
options: FirebaseOptions(
apiKey: "YOUR_API_KEY",
authDomain: "YOUR_AUTH_DOMAIN",
databaseURL: "YOUR_DATABASE_URL",
projectId: "YOUR_PROJECT_ID",
storageBucket: "YOUR_STORAGE_BUCKET",
messagingSenderId: "YOUR_MESSAGING_SENDER_ID",
appId: "YOUR_APP_ID",
),
);
runApp(MyApp());
}
3. 使用 firebase_go_admin
执行操作
3.1 管理用户
你可以使用 firebase_go_admin
来管理 Firebase Authentication 用户。例如,创建一个新用户:
import 'package:firebase_go_admin/firebase_go_admin.dart';
Future<void> createUser(String email, String password) async {
try {
UserRecord userRecord = await FirebaseGoAdmin.auth().createUser(
email: email,
password: password,
);
print('User created: ${userRecord.uid}');
} catch (e) {
print('Error creating user: $e');
}
}
3.2 读取/写入 Firestore 数据
你可以使用 firebase_go_admin
来读取和写入 Firestore 数据。例如,读取一个文档:
import 'package:firebase_go_admin/firebase_go_admin.dart';
Future<void> readDocument(String collection, String documentId) async {
try {
DocumentSnapshot documentSnapshot = await FirebaseGoAdmin.firestore()
.collection(collection)
.doc(documentId)
.get();
print('Document data: ${documentSnapshot.data()}');
} catch (e) {
print('Error reading document: $e');
}
}
3.3 发送推送通知
你可以使用 firebase_go_admin
来发送推送通知。例如,发送一条通知:
import 'package:firebase_go_admin/firebase_go_admin.dart';
Future<void> sendNotification(String token, String title, String body) async {
try {
await FirebaseGoAdmin.messaging().send(
Message(
token: token,
notification: Notification(
title: title,
body: body,
),
),
);
print('Notification sent successfully');
} catch (e) {
print('Error sending notification: $e');
}
}