Cordova集成firebase插件实现消息推送

浏览量:709

Firebase Cloud Messaging (FCM) 是一种跨平台(安卓,IOS,Web)消息传递解决方案,且无需任何费用。

最近用cordova开发app,客户希望加入消息推送功能,国内我们知道有激光推送,而国外firebase非常出名。

但是cordova使用firebase需要注意以下几点:

  • 因为firebase已被google收购,国内手机设备无法接收来自firebase的推送,除非开代理,要打开的端口和主机名见官方文档

  • 手机上的app运行状态分前台和后台

    • 前台运行时可以接收到消息推送,但是不会有消息栏的提醒(这是手机的默认行为),对于安卓,如果要在前台显示推送,推荐使用cordova-plugin-local-notification 插件
    • 后台运行或关闭时,手机收到推送会显示消息栏,如果用户点击通知,app会显示在前台,通知内容会被JS回调接收。如果不点击或关闭,通知将一直存在。
  • 我们项目中使用的是cordova-plugin-firebasex ,有个bug,手机息屏接收消息很快,亮屏app后台运行接收不稳定。

  • 关于通知权限,对于安卓,不需要授权,但是对于apple,需要调用请求授权方法,如我们用到的cordova-plugin-firebasex插件需要调用提供的grantpermission方法。

  • 使用安卓模拟器时记得选用带GooglePlay标志的版本,然后需要在更多设置里更新GooglePlay的版本,并在虚拟机内部做一下接入点代理,记得勾选一下梯子的允许来自局域网的访问。

image-20210909162430813

  • FCM发送推送分三种类型:

    • 按设备ID(针对性强,可以只发给某几台设备),需要传device token
    • topic主题,比如定义一个名为ad的topic,只有订阅这个topic的设备才能接收到通知
    • 按target目标,这应该是firebase的特色,你可以针对某平台(ios或android),某个国家,某目标人群,等统计相关参数发推送,很灵活。但是需要同时开启google analysis

  • APN(Apple Push Notification),不像安卓那么混乱,苹果通知都走的APN,大致流程:firebase通知APN,APN通知apple设备客户端。技术文档

  • 对于安卓,确保在firebase项目设置中生成了google-services.json,对于ios,要生成GoogleService-Info.plist文件,以及到苹果开发者后后台生成p8或p12文件并上传到firebase项目ios集成页面中,生成文件在放到cordova项目根目录
    建议生成P8认证文件,P12文件有很多缺点,繁琐,区分开发和正式环境,而且还有有效期,生成流程参见:iOS 推送设置指南

  • 消息推送内容可以带emoji

  • 使用命令行发送消息

Access toke可以到 https://developers.google.com/oauthplayground 获取

curl -X POST -H "Authorization: Bearer ya29.ElqKBGN2Ri_Uz...HnS_uNreA" -H "Content-Type: application/json" -d '{
  "message": {
    "topic" : "my-topic",
    "notification": {
      "body": "This is a Firebase Cloud Messaging Topic Message!",
      "title": "FCM Message"
    }
  }
}' https://fcm.googleapis.com/v1/projects/myproject-b5ae1/messages:send HTTP/1.1

参考

https://juejin.cn/post/6844904153274155022

https://github.com/katzer/cordova-plugin-local-notifications#readme

https://www.npmjs.com/package/cordova-plugin-fcm-with-dependecy-updated

https://developer.apple.com/documentation/usernotifications

留下评论