因为需要 我们的app需要集成FCM,fcm的实现包括app端跟服务器端,app端的集成是很快的,有时候比服务器端的开发快很多,我们有时候没法等服务器端做完了再测试,主要是这样的等待很漫长,而且有时候服务器端的开发不一定完全是按照我们的要求来做,还需要反复的沟通修改,因此,这时候如果有一个工具可以模拟服务器端的推送,那么会在很大程度上对我们app的开发提供帮助,而且使用工具实现推送也不会产生过多的数据。
那么如何来做这样的工具呢,首先我们可以分下fcm 的 app的sdk的基本原理,它的底层原理其实很简单,最后的实现就是向Firebase服务器端发出了一条消息请求,请求firebase服务器向指定的token发送一条推送。这样分析下来,其实好像就跟我们要实现app的某一个网络请求的功能的实现是一模一样的,我们需要的是知道这个api的url以及需要的参数,通过简单的封装就能实现了。
这个功能的url是什么呢,是这个https://fcm.googleapis.com/fcm/send
那么首先我们要知道使用这个api需要什么权限,其实也很简单,如果我们的app需要集成fcm,那么毕竟在firebase控制台需要添加此服务,从而我们在控制台可以找到该app用于fcm的一个server-key,在控制台的setting里面可以找到。将这个server-key添加到我们的请求头里面即可。
那么接下来就是参数的问题了,我前面有篇文章介绍过fcm消息的种类和其json结构
{
"data": {},
"notification": {
"body": "test",
"click_action": "NOTIFICATION_PHOTO_LIKED",
"title": "test"
},
"to": "cat-ahUETs6lvobLKqI7xU:APA91bGNgV5kQfuE3b4KqOmD-Q0aN40UC-dkSNqR5nYfVI-knxfB4WS06CDn4UXrtsR5PqqknNk2RPZkSk3vLR2f_1pDvMoRwgpvJsIykFlDmIwVoYTSTD0kDE7ohk95u2n4O"
}
这里我再次给出来,使用我们的api 将符合此结构的类post出去就可以了。是不是很简单了。
我使用的retrofit来实现的,这里给出一部分代码
interface FcmApi {
@POST("fcm/send")
fun sendNotification(@Body sendNotification: SendNotification):Observable
@POST("fcm/send")
fun sendData(@Body sendData: SendData):Observable
}
其中SendNotification
data class SendNotification(var to:String,var notification: Notification?,var data:Map?)
这里面的to就是你设备的token,这里需要你从你的实现了fcm集成的app里面获取到token添加到你这个测试工具的代码中,当然也可以作为参数添加进去。
其中Notification
data class Notification(var title:String,var body:String,var click_action:String)
知道了原理实现起来就非常简单了
网友评论