firebase-cloud-messagingfirebase-cloud-messaging入门


备注

一个臭名昭着的常见问题是“如何从设备发送通知”,遗憾的是答案是:你做不到。需要触发FCM才能发送推送通知。这可以通过3种不同的方式完成:

  1. 直接在Firebase Web控制台中
  2. 设置Firebase函数侦听器,然后触发FCM
  3. 服务器请求FCM发送推送通知

推送通知是从FCM发送的信息有效负载。推送通知有3种类型: notificationdatanotification and data 。此信息可以表示为JSON:

  {
    "to" : "APA91bHun4MxP5egoKMwt2KZFBaFUH-1RYqx...",
    "notification" : {
      "body" : "great match!",
      "title" : "Portugal vs. Denmark",
      "icon" : "myicon"
    },
    "data" : {
      "Nick" : "Mario",
      "Room" : "PortugalVSDenmark"
    }
  }

以上示例适用于第三种类型, notificationdata组合。这就是要求FCM发送的内容。

  1. 控制台可以发送带有data notificationnotification ,但不仅仅是data
  2. 功能和任何服务器都可以发送3种类型

notification类型的重要性在于允许应用程序接收默认推送功能,以便通过简单地使用Web控制台来增强应用程序增长,而无需在向项目添加库之外进行进一步编码,从而增强应用程序的增长。

请不要混淆推送通知, notification类型和可视通知,这最后对应于Android类(通常是NotificationCompat)。

推送的行为根据类型和应用程序位于前台或后台而不同。不在前景意味着,最小化或关闭。

  1. 如果应用程序不在前台notification将触发默认的可视通知,此通知可在清单中自定义,请参阅文档 。如果应用程序位于前台,我们必须自定义onMessageReceived方法中的行为。
  2. 必须始终自定义data类型行为。
  3. 如果应用程序不在前台,则组合notificationdata将触发默认视觉通知,并且当用户单击时, data有效负载将可用。由于在单击可视通知时触发了启动器Activity,因此您必须逐字地获取getIntent().getStringExtra("yourKey");在该Activity中获取数据。如果应用程序处于活动状态(在前台),则必须自定义onMessageReceived方法内的行为,并立即访问data有效内容。

要获取信息有效负载,您必须在onMessageReceived方法中执行此操作,唯一可用的参数是消息:

  1. 要获得remoteMessage.getNotification()notification ,您可以使用相应的方法获取正文或标题
  2. 要获取data ,必须使用remoteMessage.getData().get("yourKey")

添加每个非空验证是一个好主意,将有几种类型的通知到达高级应用程序。一个好的策略是验证每个, notificationdata是否都不为空。随之而来的有用策略是始终在data通知中使用type键以进行一些流控制。

要从Firebase Web控制台发送data ,必须打开高级选项。

notification密钥是有限的,并在文档中指出。 任何类型的值都只能是String

如果您在Firebase中找到任何文档时遇到问题,请转到页面底部并将语言更改为“英语”,其他语言的文档更薄

安装或设置

Firebase Cloud Messaging是处理推送通知的Firebase服务。您可以在任何客户端中添加此服务:Web,Android或IOS。必须从文档中读取每个的具体功能。

要在任何类型的项目中添加FCM,始终要添加库

考虑到对Android的特殊支持,值得采取几行措施。使用Android Studio创建一个新项目,在菜单中转到Tools / Firebase,它将触发Firebase助手。选择“云消息传递”并按照步骤一和步骤二进行操作。

  1. 如果您的项目之前添加了另一个Firebase服务,则第一步将标记为已完成,否则您必须执行此操作。第一步允许您在Firebase中创建项目或创建一个新项目。此步骤将下载google-service.json文件,该文件具有与Firebase项目连接的配置。此文件位于“app”文件夹中。
  2. 此步骤将Google服务库和Firebase库添加到gradle中,它也会在这些文件中执行一些额外配置。

这是在项目中添加FCM的基础。从现在开始,只要应用程序不在前台,客户端就能够接收包含“通知”有效负载的FCM推送通知(备注中的更多详细信息)。

为了进一步自定义我们需要添加2个服务客户端的FCM的行为,这也证明在官方网站。我们将再次考虑Android:

  1. 创建一个扩展FirebaseMessagingService 并覆盖onMessageReceived方法的类
  2. 创建一个扩展FirebaseInstanceIdService 并覆盖onTokenRefresh方法的类
  3. 在清单中注册两个类,请在application 标记</ intent-filter> </ intent-filter>中执行此操作

您可以使用其中的唯一参数获取onMessageReceived 方法中的notification 有效负载和data 有效负载。当FCM分配FCM令牌时,将调用onTokenRefresh 方法。 FCM令牌是应用程序安装和设备的唯一ID,可用作设备的地址以直接发送推送通知。

有关通知类型和相关行为的更多信息,请阅读备注。