Firebase Extensions 扩展程序可用来执行一个或一组特定任务,以响应 HTTP 请求或来自其他 Firebase 和 Google 产品(如 Firebase Cloud Messaging、Cloud Firestore 或 Pub/Sub)的触发性事件。
您可以构建自己的扩展程序供个人使用,也可以通过 Firebase Extensions Hub 将其分享给世界各地的用户。例如,您的扩展程序可以执行一项您的应用经常需要的特定任务,或者可让您的应用更轻松地访问公司的某项 API。构建扩展程序后,您可以将其分享给其他人;以便他们可以在自己的 Firebase 项目中安装、配置并使用您的扩展程序。
扩展程序的结构
您可以将扩展程序视为包含三大组成部分:
- Cloud Functions 函数代码(采用 JavaScript 或 TypeScript 编写)
- 描述扩展程序的元数据
- 帮助用户配置和使用您的扩展程序的文档
如需开发扩展程序,您需要将这三大组成部分封装到下面的结构中:
example-extension
├── functions
│ ├── integration-tests
│ │ ├── extensions
│ │ │ └── example-extension.env
│ │ ├── firebase.json
│ │ └── integration-test.spec.js
│ ├── index.js
│ └── package.json
├── README.md
├── PREINSTALL.md
├── POSTINSTALL.md
├── CHANGELOG.md
├── icon.png
└── extension.yaml
functions
目录包含 Cloud Functions 函数代码(采用 JavaScript 或 TypeScript 编写)。您的扩展程序正是通过这些代码来执行特定任务,以响应各项 Firebase 和 Google 服务触发的事件。extension.yaml
文件包含有关您的扩展程序的元数据(例如其触发器和 IAM 访问角色),以及您希望让用户可以配置的任何参数。PREINSTALL
、POSTINSTALL
和CHANGELOG
文件是您的扩展程序必须包含的文档。这些文件有助于您的用户了解扩展程序的用途、扩展程序的使用方式,以及您进行过哪些更新。您还应提供一个图标来帮助用户识别您的扩展程序。在用户探索、安装和管理您的扩展程序时,Firebase 控制台、Firebase CLI 和 Extensions Hub 都会显示这些文件的内容。
创建扩展程序后,您可以使用 Firebase CLI 将其安装到项目中,也可以将其发布到 Extensions Hub,在这里,任何人都可以发现该扩展程序并将其安装到自己的项目中。
我的扩展程序可以与哪些产品交互?
由于 Firebase Extensions 扩展程序是使用 Cloud Functions 函数来执行任务,因此您可以从下面两个方面来考虑可能的集成问题:哪些产品可能会触发扩展程序的函数?在这些函数被触发后,它们又可以与哪些产品交互?
支持的函数触发器
手动触发器
首先,您可以手动触发函数。Firebase Extensions 扩展程序和 Cloud Functions 函数支持通过下面两种方式来手动触发函数:
- HTTP 触发器:将函数部署到 HTTP 端点
- Callable 函数:使用 Firebase 客户端 SDK 直接通过 iOS、Android 或 Web 客户端代码调用 Cloud Functions 函数。
从您的扩展程序公开 HTTP 端点后,扩展程序就能够与支持 webhook 的 Web 服务进行集成。若是使用 Callable 函数,安装了您的扩展程序的用户则可以使用 Firebase SDK 作为客户端库来访问您的扩展程序实现的 API。
Firebase 服务触发器
大多数 Firebase 产品发出的事件都可以触发扩展程序的 Cloud Functions 函数。
- Analytics:在 Analytics 记录事件时触发函数
- App Distribution:在 App Distribution 触发提醒时触发函数
- Authentication:在用户创建和删除账号时触发函数
- Cloud Firestore:在有页面被创建、更新或删除时触发函数
- Cloud Storage:在存储桶中有对象被上传、归档或删除时触发函数
- Crashlytics:在 Crashlytics 触发提醒时触发函数
- Performance Monitoring:在 Performance Monitoring 触发提醒时触发函数
- Realtime Database:在有数据被创建、更新或删除时触发函数
- Remote Config:在有参数被更新时触发函数
- Test Lab:在 Test Lab 触发提醒时触发函数
Google Cloud 服务触发器
扩展程序还可以包含由一些 Google Cloud 服务(非 Firebase 服务)触发的函数:
- Cloud Pub/Sub:扩展程序可以包含在有事件被发布到可配置的 Pub/Sub 主题时触发的函数。
- Cloud Scheduler:扩展程序可以包含按设定的时间表运行的函数
- Cloud Tasks:扩展程序可以包含可使用 Cloud Tasks 加入队列的函数。Firebase Extensions 扩展程序有了这一功能后,您作为扩展程序的创作者,可以编写函数来响应扩展程序的“生命周期”事件:首次在项目中安装时、升级到新版本时、进行重新配置时。
- Eventarc:扩展程序可以包含在有事件被发布到可配置的 Eventarc 渠道时触发的函数;反之,扩展程序亦可以将自己的事件发布到 Eventarc 渠道,以便用户可以定义自己的函数来响应扩展程序的事件。
受函数支持
扩展程序的 Cloud Functions 函数被触发后,基本就可以进行自由集成。下面介绍了 Cloud Functions 函数的一些主要用法:
- 与使用受支持的 IAM 角色的任何 Firebase 或 Google Cloud 服务进行读写及其他方式的交互。
- 与提供了 Web API 的任何第三方服务进行交互。
- 与您自己的自定义服务进行交互(如果您提供了 Web API)。
- 运行大多数 JavaScript 库,包括 TensorFlow.js、Express.js 等。
如何构建扩展程序
使用入门教程将引导您完成构建、测试和发布完整扩展程序的流程,同时也是了解如何构建扩展程序的推荐方法。
在通读使用入门指南后,您可以参考各个主题指南,这些具体的指南会介绍构建您自己的扩展程序所涉及的每项任务:
- 为扩展程序编写函数
- 在扩展程序中使用参数
- 为扩展程序设置适当的访问权限
- 响应扩展程序生命周期事件
- 向扩展程序添加用户钩子
- 为扩展程序创建用户文档
- 将扩展程序发布到 Extensions Hub 上
- 完整的 extension.yaml 参考文档