firebase-cloud-messaging 入门
一个臭名昭着的常见问题是如何从设备发送通知,遗憾的是答案是:你做不到。需要触发 FCM 才能发送推送通知。这可以通过 3 种不同的方式完成:
- 直接在 Firebase Web 控制台中
- 设置 Firebase 函数侦听器,然后触发 FCM
- 服务器请求 FCM 发送推送通知
推送通知是从 FCM 发送的信息有效负载。推送通知有 3 种类型:notification
,data
,notification and data
。此信息可以表示为 JSON:
{
"to" : "APA91bHun4MxP5egoKMwt2KZFBaFUH-1RYqx...",
"notification" : {
"body" : "great match!",
"title" : "Portugal vs. Denmark",
"icon" : "myicon"
},
"data" : {
"Nick" : "Mario",
"Room" : "PortugalVSDenmark"
}
}
上面的例子是第三种类型,notification
和 data
的组合。这就是要求 FCM 发送的内容。
- 控制台可以发送
notification
和notification
与data
但不仅仅是data
- 功能和任何服务器都可以发送 3 种类型
notification
类型的重要性在于,允许应用程序接收默认*推送功能,*使其他团队(如市场营销)能够通过简单地使用 Web 控制台来增加应用程序增长,而无需在将库添加到项目之后进行进一步编码。
请不要混淆推送通知,notification
类型和视觉通知,这最后对应一个 Android 类(通常是 NotificationCompat)。
推送的行为根据类型和应用程序位于前台或后台而不同。不在前景意味着,最小化或关闭。
- 如果应用程序不在前台,
notification
将触发默认的可视通知,此通知可在清单中自定义,请参阅文档 。如果应用程序位于前台,我们必须自定义onMessageReceived
方法中的行为。 - 必须始终定制
data
类型的行为。 - 如果应用程序**不在前台,**则组合
notification
和data
将触发默认视觉通知,并且当用户单击时,data
有效负载将可用。由于在单击视觉通知时触发了启动器活动,因此你必须在该活动中逐字地获取数据。如果应用程序处于活动状态(在前台),则必须自定义onMessageReceived
方法内的行为,并立即访问data
有效负载。
要获取信息有效负载,你必须在 onMessageReceived
方法中执行此操作,唯一可用的参数是消息:
- 要获得
notification
,你必须使用相应的方法获得身体或头衔 - 要获得
data
,你必须得到remoteMessage.getData().get("yourKey")
。
添加每个非空验证是一个好主意,将有几种类型的通知到达高级应用程序。一个好的策略是验证 notification
和 data
是否都不为空。随之而来的有用策略是在 data
通知中始终使用 type
键来进行一些流程控制。
要从 Firebase Web 控制台发送 data
,必须打开高级选项。
notification
键是有限的,并在文档中指出。任何类型的值都只能是 String 。
如果你在 Firebase 中找到任何文档时遇到问题,请转到页面底部并将语言更改为英语,其他语言的文档更薄。