美文网首页
Firebase Cloud Message开发经验总结

Firebase Cloud Message开发经验总结

作者: aloyise | 来源:发表于2020-04-20 11:09 被阅读0次

    FCM是一个比较流行的云消息开发工具,它是实现也是比较简单的,闲话少说,先上代码

    https://github.com/firebase/quickstart-android/blob/master/messaging/app/build.gradle

    这个是FCM官方demo的配置,具体的代码实现里面也有,大家可以查看。如果app需要集成fcm,那么照着这个demo来做应该是八九不离十了。

    不过在我自己的项目开过程中,遇到了一些问题,有些概念需要跟大家解释清楚,这样帮助大家过坑。

    1.关于Token。从demo中大家不难看出,我们的fcm最重要的保证消息能从服务端正确推送到我们手机上的标识就是token,这个token是使用方法就是,从firebase服务器端获取到你当前app在这个手机上的唯一识别token,并将此token通过你们自己的服务器端接口注册到你们自己的服务器上,如此两步方能完成。这里需要提醒大家这里的token的唯一性是由firebase的服务器端保证的,它跟你的业务服务器端是没有关联的,它的唯一性只体现在firebase的服务器端,怎么理解呢,举一个简单的例子,通常我们的fcm业务都是给注册用户发送一些推送,但这里如果我们不将注册用户与token关联从而形成业务服务器端的唯一性的话,我们只辨认token的话,那么只要是在当前这个token的设备上登陆的用户都能收到你发送到这个token的消息。所以在我所提到的上面的第二步中,你向自己业务服务器端注册的时候,要保证与你的业务的唯一性,当然如果你是用来类型如广播之类的业务除外。就我刚才的例子来讲,就是将用户与token结合成一个业务的唯一性,以此来推断,一个用户可以有多个token,但是一个token只比较适合对应一个用户,不太适合或者不建议对应多个用户。另外,同一个设备的token并不是不变的,这里在app卸载并重新安装之后,它的token是会发生变化的,大家要注意在适当的地方检测这种变化并及时的与自己的业务联系。

    2.关于FCM消息的种类,其实fcm的消息有两种,一种是notification message,另一种是data   message。这两种消息并不会影响你对fcm的sdk的集成,但是如果更好的理解这两种消息的异同,你应该能更好的满足你的项目的需求。

    首先是notification message,从名字就可以看出,他是会生成系统的notification的,它的json格式大致如下

    {

    "data": {},

    "notification": {

    "body": "test",

    "click_action": "NOTIFICATION_PHOTO_LIKED",

    "title": "test"

    },

    "to": "cat-ahUETs6lvobLKqI7xU:APA91bGNgV5kQfuE3b4KqOmD-Q0aN40UC-dkSNqR5nYfVI-knxfB4WS06CDn4UXrtsR5PqqknNk2RPZkSk3vLR2f_1pDvMoRwgpvJsIykFlDmIwVoYTSTD0kDE7ohk95u2n4O"

    }

    其中 to 的值 是接收方的设备号,是需要一开始用户注册到我们app的token。notification message 在json的体现就是有一个 notification的属性在里面,只要有这个notification属性那么android系统将会自动认为这是一个通知,它将有机会出现在我们手机状态栏里面。notification message在推送到我们的设备后如果我们的app还没有启动(或者已经被杀死)或者在后台,是不会被我们的app所截获的,android系统将会直接将其变成一个通知出现在状态栏中,我们下拉状态栏可以查看并操作,只有当我们的app启动到前台,我们才能截获这个notificaiton message。

    其次 data message 形如

    {"data":{"KEY":"DATA_VALUE"},"to":"cat-ahUETs6lvobLKqI7xU:APA91bGNgV5kQfuE3b4KqOmD-Q0aN40UC-dkSNqR5nYfVI-knxfB4WS06CDn4UXrtsR5PqqknNk2RPZkSk3vLR2f_1pDvMoRwgpvJsIykFlDmIwVoYTSTD0kDE7ohk95u2n4OtKVt1NZ"}

    可见data message没有 notificaiton属性,只有键值对的内容。显而易见,android系统是无论如何也不会将它变成我们的通知的。当然,其实我们的notification mssage也可以带上data。不过既然这里没有notificaiton属性我们就不视为notification message。data message是在当我们的app在后台的时候也能截获的一种推送。但是当app没有启动我们就无法获得这个data message了。

    从这两种message的异同我们可以看出,当我们需要用户在我们app没有开启的时候依然能收到我们的推送的时候,这里 notificaiton message比较适合,当我们app在后台接受到推送我们不希望它自动成为一个通知的时候,我们就可以选择data message这样以方便我们根据自己的业务决定做什么行动。

    相关文章

      网友评论

          本文标题:Firebase Cloud Message开发经验总结

          本文链接:https://www.haomeiwen.com/subject/tumlihtx.html