📜  Firebase触发器

📅  最后修改于: 2021-01-02 03:51:41             🧑  作者: Mango

火基触发器

我们编写的功能可以响应Firebase和称为触发器的Google Cloud功能生成的事件。在开发第一个Cloud Function之前,我们将探索可用于Cloud Function的最常见触发器。有以下触发器:

Cloud Firestore触发器

用于Firebase SDK的Cloud Functions导出函数.firestore对象,该对象使我们能够创建与特定Cloud Firestore事件绑定的处理程序。需要注意的一件事是,Cloud Firestore事件将仅在文档更改时触发。无法将事件添加到特定字段。

S.No Event Type Trigger
1. onCreate It is triggered when a document is written for the first time.
2. onUpdate It is triggered when a document already exists and has any value changed.
3. onDelete It is triggered when a document is deleted with the data.
4. onWrite It is triggered when onCreate, onDelete, or onUpdate is triggered.

实时数据库触发器

通过使用实时数据库触发器,我们可以响应Firebase实时数据库中的更改。为此,我们必须在特定的数据库路径函数.database.ref('/ foo / bar')上注册事件。我们要注册的数据库路径作为参数传递。

使用花括号,也可以将路径的这部分定义为通配符。

functions.database.ref('/profiles/{userID}')
S.No Event Type Trigger
1. onWrite() It is activated when the data is created, changed, or destroyed.
2. onCreate() It is activated when new data is created.
3. onUpdate() It is activated when data is updated.
4. onDelete() It is activated when data is deleted.

身份验证触发器

通过使用身份验证触发器,我们可以通过Firebase身份验证执行代码,以响应用户帐户的创建和删除。 Exports.newUserCreated = functions.auth.user()。onCreate(event => {…})用于创建事件处理函数,如果创建了新用户,该函数将执行。

在以下情况下,将调用身份验证触发器:

  • 用户创建电子邮件帐户和密码时。
  • 用户在联合身份提供者的帮助下首次登录时。
  • 当开发人员使用Firebase Admin SDK创建帐户时。
  • 用户首次登录新的匿名身份验证会话。

如果用户首次使用自定义令牌登录,则不会触发Cloud Functions事件。

云存储触发器

我们可以触发函数来响应Cloud Storage中文件和文件夹的更新,上传和删除。要注册事件处理程序函数,我们必须通过以下方式使用函数.storage对象:

exports.storageChanges = functions.storage.object().onChange(event => {...});

在上面的代码行中,我们正在为默认存储桶上的所有对象更改注册事件处理程序。如果要指定特定的存储桶,则还必须添加对桶函数的调用:

exports.storageChanges = functions.storage.bucket('bucketName').object().onChange(event => {...});

在事件处理函数,我们可以利用各种存储属性:

S.No Attribute Description
1. event.data The storage object.
2. event.data.bucket The storage bucket that contains the file.
3. event.data.name The path of the file in the bucket.
4. event.data.contentType The file content type.
5. event.data.resourceState Either exist or not_exists. The not_exists value is set if the file/folder has been deleted.
6. event.data.metageneration It is the no. of times the metadata of the file has been generated, and for new objects, the initial value is 1.

HTTP触发器

HTTP触发器可与Firebase Cloud Function一起使用。这些触发器是通过HTTP请求调用的,并通过以下方式使用functions.https注册的:

exports.httpTest = functions.https.onRequest((req, res) => {...});

远程配置触发器

为了响应Firebase远程配置事件,我们可以触发一个函数,包括发布新的配置版本或回滚到旧版本。为了触发Remote Config函数,我们使用onUpdate处理程序,该函数.remoteConfig函数提供

onUpdate返回TemplateVersion对象,该对象包含模板更新的关键元数据字段,例如更新的时间和版本号。我们还可以检索进行更新的用户的电子邮件,其中包含图像和名称(如果有)。

分析触发

通过使用Firebase的Google Analytics(分析),我们可以详细了解用户如何与我们的Android应用和iOS应用进行交互。 Analytics API公开了各种事件。类型转换事件可用于注册云功能,如下所示:

exports.onPurchase = functions.analytics.event('in_app_purchase').onLog(event => {...});

Crashlytics触发器

为了响应Crashlytics问题事件(包括新问题,速度警报和退化问题),我们可以触发函数。

为了触发Crashlytics函数,我们使用function.crashlytics.issue()生成一个IssueBuilder ,然后,我们调用构建器的相应问题生成函数。

S.No Function Description
1. onNew() This is triggered when our app experiences an issue for the first time.
exports.sendOnNewIssue = functions.crashlytics.issue().onNew(async (issue) => {
  // ...
});
2. onRegressed() It is triggered when an issue reoccurs after it is closed in Crashlytics.
exports.sendOnRegressedIssue = functions.crashlytics.issue().onRegressed(async (issue) => {
  // ...
});
3. onVelocityAlert() It is triggered when a statistically significant number of sessions in a given build crash.
exports.sendOnVelocityAlert = functions.crashlytics.issue().onVelocityAlert(async (issue) => {
  // ...
});

发布/订阅触发器

Google Cloud Pub / Sub是全球分布的消息总线,可根据需要自动缩放。我们可以使用函数创建一个处理Google Cloud Pub / Sub事件的函数。

当新的发布/订阅消息发送到特定主题时,我们可以触发函数。我们必须指定用于触发函数的发布/订阅主题名称,并在onPublish()事件处理程序中设置事件。

exports.helloPubSub = functions.pubsub.topic('topic-name').onPublish((message) => {
  // ...
});

测试实验室触发器

我们可以响应Firebase Test Lab中测试矩阵的完成而触发函数。为了创建一个新的函数,该函数在事件处理函数.testLab.testMatrix()。onComplete()完成时触发TestMatrix:

exports.sendEmailNotification = functions.testLab.testMatrix().onComplete((testMatrix) => {
  // ...
});