作为google 官方的推送,相比也是很多app离不开的功能,而且会经常用到的,这里总结一下如何集成FCM 以及后面探索一下相关原理。

说明:对于任何google service(统计,推送,广告等等 谷歌服务) 来说,他们都依赖于手机里面的google服务框架这个系统级别的app,同时会依赖 google-services 库,这些东西都会在工程里面去配置,另外,现在所有的服务都集成到firebase这个平台了,所以也要去集成firebase库,这是google 提供给开发者一个对外统一操作者平台,里面可以进行新建工程和配置。

因此,这样来说集成任何一个google服务,都需要分两步走,

  • 第一步集成google service服务,添加firebase到工程中, 参考文章
  • 集成想要的具体服务,并使用相应的api

第一步:集成firebase ,可以参考 集成Antatly ;
第二步:集成Message:官方网站

1 . 登录网站 ,找到Cloud Message ,选择自己的平台android(或iOS) 如下图:

2. 添加Message的依赖:

    compile 'com.google.firebase:firebase-core:11.0.4'compile 'com.google.firebase:firebase-analytics:11.0.4'compile 'com.google.firebase:firebase-messaging:11.0.4'

注意:具体的某个服务 如:Message 要和 core 版本号要一致;

3. 获取Token ,完成注册

您的应用初次启动时,FCM SDK 会为客户端应用实例生成一个注册令牌。如果您希望定位单一设备或创建设备组,则需要通过扩展 FirebaseMessagingService 并重写 onNewToken 来获取此令牌。

本部分介绍如何检索令牌以及如何监控令牌的变更。因为令牌会在初始启动后轮替,所以我们强烈建议您检索最近更新的注册令牌。

注册令牌可能会在发生下列情况时更改:

  • 应用删除实例 ID
  • 应用在新设备上恢复
  • 用户卸载/重新安装应用
  • 用户清除应用数据。

检索当前注册令牌

如果需要检索当前令牌,请调用 FirebaseInstanceId.getInstance().getInstanceId()

FirebaseInstanceId.getInstance().getInstanceId().addOnCompleteListener(new OnCompleteListener<InstanceIdResult>() {@Overridepublic void onComplete(@NonNull Task<InstanceIdResult> task) {if (!task.isSuccessful()) {Log.w(TAG, "getInstanceId failed", task.getException());return;}// Get new Instance ID tokenString token = task.getResult().getToken();// Log and toastString msg = getString(R.string.msg_token_fmt, token);Log.d(TAG, msg);Toast.makeText(MainActivity.this, msg, Toast.LENGTH_SHORT).show();}});

这是 官网提供的api 16的代码,不同的版本代码不一样,但这一步都是获取 registerId 注册令牌,如 11.0.4 版本的获取方式就是

 String id = FirebaseInstanceId.getInstance().getToken();

另外,这一步手机需要翻墙,否则获取不到,后面就不用翻墙了。

监控令牌的生成

每当生成新令牌时,都会触发 onNewToken 回调函数, 所以在FirebaseMessageService 重写这个类。

注意:有的版本可能没有这些方法,因为这是针对16的版本,所以知道有这么回事就行了,还有app的重启令牌不会重新生成,当我们在设置界面把app数据清空就会生成一个新的令牌,这其中的原理后面研究一下?

官网参考

4. 接收消息

自己新建一个service 集成 FirebaseMessageService ,重写 onMessageReceiver 即可。并在mainfest进行注册一下;

public class ReceivePushMsgService extends FirebaseMessagingService {private static final String TAG = "ReceivePushMsgService";@Overridepublic void onMessageReceived(RemoteMessage remoteMessage) {Log.d(TAG, "From: " + remoteMessage.getFrom());// Check if message contains a data payload.if (remoteMessage.getData().size() > 0) {Log.d(TAG, "Message data payload: " + remoteMessage.getData());//            if (/* Check if data needs to be processed by long running job */ true) {
//                // For long-running tasks (10 seconds or more) use Firebase Job Dispatcher.
//                scheduleJob();
//            } else {
//                // Handle message within 10 seconds
//                handleNow();
//            }}// Check if message contains a notification payload.if (remoteMessage.getNotification() != null) {Log.d(TAG, "Message Notification Body: " + remoteMessage.getNotification().getBody());}}

以上 1,2, 3, 4 步就是全部的集成步骤。

利用Firebase平台进行测试

输入消息信息,并通过FCM令牌进行精准推送

最后点击发送,然后再日志输出:

04-11 16:32:06.020 11617-11967/com.sjh.firebasedemo D/ReceivePushMsgService: Message Notification Body: 测试推送
04-11 16:32:26.515 11617-11989/com.sjh.firebasedemo D/ReceivePushMsgService: onMessageReceived: {}onMessageReceived: com.google.firebase.messaging.RemoteMessage@6567653
04-11 16:32:26.516 11617-11989/com.sjh.firebasedemo D/ReceivePushMsgService: From: 92864427547Message Notification Body: 测试推送

ok ,一切完工。另外,还有其他的定位用户的方法,通过Topic,分组等方式,这些就不一一讲述了。

google FireBase产品接入 —— FCM相关推荐

  1. 【Android】 Firebase登录、FCM、Google Play支付、adbrix、ONEStore、Galaxy Store、Google Install Referrer

    Android SDK接入 最近接了一个韩国的渠道,之前没有接过这些原生的sdk,头大啊.本来也不是搞android开发的,只能强搞了.还是国内的好啊,都给你整合完了. 如有问题,麻烦大佬指教一二,非 ...

  2. 创建Firebase项目并接入Firebase推送: Firebase Cloud Messaging (FCM)

    1.FCM简介: Firebase Cloud Messaging (FCM) 是一种跨平台消息传递解决方案,可供您可靠地传递消息,而且还是免费的服务.支持 Android,IOS,Web,Flutt ...

  3. Facebook加入AI芯片大战,挖走Google芯片产品开发负责人

    据外媒 The Information 报道,Facebook 正在投入更多资源用于开发 AI 芯片,并在本月挖走 Google 高级工程师主管 Shahriar Rabii,此前这位主管曾是 Goo ...

  4. 互联网人在硅谷:听 Google 资深产品经理 bigjoe 聊聊职业与热爱

    [导语]硅谷也有 996 吗?硅谷的互联网人境遇究竟如何?初出校门的职场小白该如何合理安排职业规划?热爱与风口之间应当如何抉择?欲将前路托产品,蠢蠢欲动心何寄?而面对晋升焦虑,产品人又当何去何从? 北 ...

  5. Google Firebase ANE 使用教程

    Goole Firebase ANE 使你可以轻松的在app里面集成google统计和admob到adobe air制作的游戏和应用中 您可以使用它与Air iOS和Android App使用相同的a ...

  6. Google FireBase的简单介绍

    Google FireBase的简单介绍和使用 一.FireBase是啥东东,可以吃嘛? FireBase官网(需要科学上网) 用官网简介的话来说就是:构建更出色应用和成功地扩大业务所需的工具和基础架 ...

  7. Google的产品和服务

    Google搜索引擎 公司产品Google是 全世界最受欢迎的搜索引擎,使用一种自创的称为PageRank™(网页级别)技术来索引网页,索引是由程序"Googlebot"执行的,它 ...

  8. Unity3D Android接入FCM推送

    本来以为推送是个很简单的功能,碰了之后才知道是个天坑,谁踩坑谁.这篇帖子会简要提供测试过的坑,如果只想看FCM可以跳到第二部分. 一,目前Unity3D有三种推送方式, 1,用官方自带的插件,包管理器 ...

  9. Unity Google Android登录接入

    a.以下链接是Google 登录unity sdk 插件文档 直接导入即可 https://github.com/googlesamples/google-signin-unity/releases ...

最新文章

  1. 自己对Delphi中使用正则表达式的研究心得
  2. python顺时针螺旋顺序
  3. trove mysql 镜像_trove 基于 centos7 制作 mysql5.6 镜像
  4. Android NDK学习笔记3:JNI访问Java属性、方法
  5. python mro c3_python的MRO和C3算法
  6. LeetCode 1048. 最长字符串链(哈希+DP)
  7. 《科学:无尽的前沿》分享会在京举办,助力中国企业打造“科研的应许之地”
  8. SQL工作笔记-达梦数据库关于时间的函数
  9. 查看java线程堵塞排查_记一次应用线程被阻塞的问题排查
  10. 我来重新学习 javascript 的面向对象(part 1)
  11. java编程计算加减乘除_Java程序完成加减乘除四则运算
  12. java.lang.OutOfMemoryError:Java堆空间
  13. ORB-SLAM2双目开源框架 (4) LoopClosing解析
  14. ORA-00091错误的解决方式
  15. java与模式孙悟空_设计模式之原型模式 - chenxkang的个人空间 - OSCHINA - 中文开源技术交流社区...
  16. 高通骁龙MSM8916核心板 ARM Cortex-A53 四核 中文资料
  17. 计算机性能检查方法,测试电脑性能的方法步骤详解
  18. speedoffice被隐藏的工作表如何取消隐藏
  19. Pygame实战:BOOM 这有一款超刺激的扎气球游戏等你来玩~
  20. 网络协议基础05--数据链路层

热门文章

  1. [PMLR 2017] On calibration of modern neural networks
  2. Vultr 怎么修改 Root 账户密码
  3. java jbutton 不可点击_JTable和JButton点击不起作用
  4. Dubbox 是什么?
  5. FCM算法原理及matlab实现
  6. android deb文件怎么打开,演示apk是什么文件?怎么打开apk文件呢?
  7. 2019几大主流的前端框架,几款目前最热门的前端框架
  8. Interledger协议(ILP)
  9. 转向新页,控制页面大小并传值
  10. 学习笔记——Kaggle_Digit Recognizer (KNN算法 Python实现)