版权声明:前端
本帐号发布文章均来自公众号,承香墨影(cxmyDev),版权归承香墨影全部。android
每周会统一更新到这里,若是喜欢,可关注公众号获取最新文章。git
未经容许,不得转载。github
推送服务在国内有不少服务商,可是若是是作海外 App ,推荐仍是使用 Google 本身的推送服务,毕竟海外经常使用的手机型号,都是有 Google 服务在的。数据库
Google 的推送服务,之前叫作 GCM(Google Cloud Message)。而自从 Google 将 Firebase 收购以后,就将推送服务并到 Firebase 的一项服务中了,如今叫作 FCM。json
本文就在 Android 下,集成 FCM 的过程,作一个详尽的讲解。后端
Firebase 本来是一家实时后端数据库的创业公司,主要用于帮开发者快速的写出 Web 端和移动端的应用,相似于国内 Bmob 这种后端云服务,让前端或者客户端开发者,一行服务端代码都不用写,只须要简单的配置,就能够快速的开发出一款引用来。app
Bmob 我也只是看了文档,没有实际使用过,具体怎么样不作评价。模块化
以后 Firebase 被 Google 收购,开始使用 Google 的云服务,又增长了一些 Google 自己的服务,更丰富了它的功能。字体
Firebase 除了支持 Android 以外,也支持其余的一些语言和平台,例如:iOS、C++、Unity。
基本上你能想到的功能,Firebase 都是支持的,主要我以为比较好用的功能:受权登陆、推送、实时数据库、CDN存储、崩溃报告、事件统计、带回源的动态邀请、广告、推广等。
因此若是你须要开发一款在海外使用的 App 的话,Firebase 是一个不错的选择,Firebase 采用的是模块化集成,使用到什么功能,就集成什么功能便可。
有关 Firebase 详细的内容,能够参见官方文档:
https://firebase.google.com/d...
只要须要用到 Firebase 的功能,前提就是必须将 Firebase 的基础服务集成到项目中。
Firebase 的集成很是的简单,只须要注册一个 Google 账号,而后在其中新建一个 App ,配置好对应的配置,将 App 的 google-service.json 这个配置文件下载下来,放在项目的对应位置便可。
没什么好细说的,直接看官方文档,一步一步走就能够了。
https://firebase.google.com/d...
最终生成的 App 大概是这样的:
在设置里就能够下载 google-services.json 文件。
到这里,基本上就认为你已经成功集成 Firebase 到你的项目内了,接下来就开始集成 FCM 的模块了。
在 build.gradle 文件,添加 FCM 的依赖。
官方的例子中使用的是 10.2.6,可是实际上推荐使用新版 11.0.4 。
FCM 主要的两个 Service ,都须要在 Manifest 中进行配置。
一、继承自 FirebaseMessagingService 的服务。
它主要用于处理接收 App 正在运行的时候,接收到的推送,通常而言咱们也不会只是想要接收 App 不在运行时候的推送,因此一般都须要集成它。
二、继承 FirebaseInstanceIdService 的服务。
它主要用于管理 FCM 的注册令牌(下文简称 FCM_TOKEN ),以及更改等。它能够获取到用户设备惟一的一个 FCM_TOKEN ,向单个用户推送消息的时候使用。
一、MyFirebaseMessagingService
先来看看它的结构。
这里,咱们真正须要关心的只有 onMessageReceived()
方法,它会在接收到推送的时候被回调。注意这里的方法都是在 WorkerThread 线程中完成的,因此要额外注意操做 UI 的状况。
在 onMessageReceived()
方法的回调中,会传递一个 RemoteMessage 的对象,它包含了接收到的推送的全部内容。咱们须要根据这个推送传递过来的信息,进行额外的操做。例如:弹窗提醒、建立一个 Notification 等等。
二、MyFirebaseInstanceIDService
继续看看它的结构。
其实内部有一些被混淆了的方法,可是咱们真正关心的只有 onTokenRefresh()
这一个方法,它会在 FCM_TOKEN(文档里叫令牌) 被刷新的时候回调。
正常来讲,App 启动的时候,会被分配一个 FCM_TOKEN ,它能够经过 FirebaseInstanceId.getInstance().getToken()
这个 Api 获取到,可是它并不是一成不变的,当它变更的时候,就会回调 onTokenRefresh()
方法。因此若是有对单个用户推送的业务逻辑的话,这里就须要上报给你的服务端,当前用户的 FCM_TOKEN 了。
到这里,基本上就算是完成了 FCM 的集成,具体细节,建议查看官方文档。
https://firebase.google.com/d...
当你一切都配置完成以后,你就能够在 Firebase 的后台,Notifications 的模块,进行消息的推送。(也多是由服务端来实现推送功能)
首先你须要配置一个内容,就是 Message text。
固然,FCM 和众多推送同样,同时支持推送全部用户、Topic 分组、单个设备,这里只推送我指定的设备。
还能够为 FCM 推送消息配置一个 Title ,而且它是支持最新 Android O 中支持的 Notification Channel 的配置。若是有须要,能够再配置传递的参数。
点击 SEND MESSAGE 按钮,你就能够在设备上收到你的推送消息。
展开后的效果:
到这里,基本上算是完成的 FCM 的集成与使用。
前面的内容,基本上都是你在官方文档上能查阅到的,接下来说的,就是干货中干货。说是干活,就是使用过程当中遇到的一些坑。
App 在运行的时候,推送若是有 Notification ,通常也是咱们本身去控制的,因此最终它点击后的效果,咱们是能够经过 PendingIntent 作部分定制的。
可是若是是在 App 没有运行的状况下,就彻底归 FCM 服务帮你完成这一系列的操做,它点击后的效果,只能将你的 App 调起,而且把你须要的参数传递到你的 SplashActivity(Action 为 android.intent.action.MAIN 的 Activity) 上。
因此咱们就须要考虑两种状况下,数据的传递已经响应,这个是须要根据业务来讨论的,空聊是没有意义的。
前面看到,使用 FCM 若是在 App 没有运行的状况下,是彻底不受控的。可是 FCM 依然为咱们提供了配置 icon 的地方,若是你不配置,你将会受到一个白色的小方块图标的推送。
FCM 的推送通知,能够配置 icon 以及 App 名称的颜色,像前面 Demo 的例子中,就是直接使用 Firebase 的 Github 上的 Demo 的图片。
对 icon 和 字体颜色的配置,须要在 AndroidManifest.xml 中进行。
还有一点须要注意,一般咱们 App 的 Icon 都作的很是的精美,可是这种 Icon 是没法直接使用在 FCM 的推送上的。须要额外的定制,以及对应的尺寸。
FCM Icon 的标准:背景透明,以白色图案填充。(实际上,展开后的效果会将icon 进行着色,因此任何颜色最终都会被着色成咱们配置的颜色,不配置默认是个浅灰色)。
而它的尺寸,以下表所示:
固然,它和图标的适配同样,不必定须要全套,只须要配置咱们须要的尺寸便可。
若是配置好这些,依然获得的是一个白色的小块,能够尝试升级一下 FCM 的版本,低版本好像是有这个 Bug ,在新版已经解决了。
到这里基本上 FCM 的一些使用细节都讲解清楚了。若是还有问题,推荐查阅官方文档或者直接看 Github 上的 Demo 。
https://github.com/firebase/q...
其实总体来看 Firebase 提供的服务,使用起来都很是的方便。若是一直收不到推送,检查你的上网方式,毕竟是给海外 App 使用的。再有问题,能够文末留言。等你问个人时候我还记得的话,我确定会回复你的。
点赞或者分享吧~