最初了解到极光,是看到极光在知乎发的一篇帖子,关于他们开源的 IM 项目:Aurora IMUI的,从此知道了极光这个公司,在 2017 年 8 月,自己有个项目,需要推送信息到手机客户端,和老师讨论后,觉得自己写服务器和客户端采用轮询的方式来推送开发周期太长,便决定使用第三方SDK,我第一时间就想到了极光的推送服务,立马开始开发,没想到极光的推送服务集成度这么高,3天就完成了客户端与推送端的开发!
极光的客户端和服务端都有 demo ,代码开源,计算机等专业的同学,可以在自己的一些开发课程中运用这个推送功能给自己的项目增添一些特点,譬如定时推送功能可以在一些纪念日起到意想不到的效果,听说上次参加征文活动的老铁就用这个功能给他女朋友来了个惊喜:文章地址。
我下面会介绍一些开发流程和重要注意事项,希望能给大家提供一些帮助。
一:首先要在自己的项目里面集成极光推送的功能
(1):注册自己的极光账号,点击这里立即注册一个极光账号:极光账号注册
(2):进入控制台创建一个应用:创建应用,应用名必须输入,极光官网的应用名称只是一个昵称,可以和自己的项目不一致,一般会考虑在项目名后加上「debug 项目」等标识性文字。
(3):点击“完成推送设置”,在这个页面完成自己各项设置,注意,安卓应用包名一定要和自己的项目包名相同,不然到时候客户端集成时会报错的。
(4):配好包名,拿到应用的 AppKey 后就可以开始在客户端集成了。
(5):在 Android Studio 项目根目录底下打开 build.gradle,添加如下信息:
附上自己代码,方便大家查看,因为这是我实验室的项目,所以源码就不开源了,请大家见谅,本人代码如下图:
(6):之后打开 app 目录底下的 build.gradle 文件,添加如下信息
本人代码如下图:
截止目前咱们就添加好极光推送的环境了,非常的快速智能,有任何问题可以对照官方文档极光Android集成指南
以及我的项目截图或者咨询官方QQ群:589310586
二:开始推送
如果你的项目只需要简单的信息推送,那么你只需要两句话就可以使用极光推送了,在你的的安卓项目的 MainActivity 的 onCreate() 方法里面添加一下两句,就可以推送了
JPushInterface.setDebugMode(true);
JPushInterface.init(getApplicationContext());
这时候打开极光推送的控制台极光推送控制台,推送一条信息,在这里你可以选择全部用户,也可以选择 Registration ID 进行推送,如果选择 Registration ID 推送的话就填入你之前客户端注册成功后得到的 Registration ID ,点击立即发送,你的手机就可以收到刚才你在控制台推送的信息了,如图
如果你的项目有单独的账户体系,你以后想要针对单个人员推送,或者针对一群人推送,使用以下方法
1:设置单个人员别名:
public static void setAlias(Context context, int sequence, String alias);
其中第二个参数 sequence 序列号是方便开发者知道某一次返回是自己哪一次操作,查询流水号用,没有什么特殊要求。
另:设置别名标签的新接口,Android 现在是异步回调,所以你也可以据此自己设定下什么sequence 代表每次你做了什么操作。
第三个参数 alias 就是你的账号别名,设置成功以后对这个别名进行推送,你的设备就可以收到信息了。
2:设置一群人——标签
public static void setTags(Context context, int sequence,Set<String> tags);
其中第二个参数与设置别名同样,第三个就是你标签的名称了,到时候可以选择推送信息给这个标签下的所有人,就完成了推送一群人的信息。
以上咱们就完成了 Android 客户端的基本配置,下面咱们讲 Android 推送进阶教程
三:进阶教程
有的朋友在收到通知后,可能有些信息显示不全,需要点击一下,查看通知里面的具体信息,不用担心,极光同样提供了方法,但是这时候就需要我们在项目中添加一个广播接收器了,内容如下:
可以看到,这个广播接收器收到了以下这个动作后,就代表了用户点击了通知,接下来我们
JPushInterface.ACTION_NOTIFICATION_OPENED
就可以做具体操作了,看我自己写的:
从上面可以看到, title 就是我获取到的通知的标题,content 就是我获取到的通知具体内容,我启动了一个 intent1,把 content 传了过去,我在 MessageActivity 这个活动中显示了通知的具体内容。
极光推送不仅可以推送通知,还可以推送自定义信息,自定义信息是不会主动显示为通知的,而是会传输到应用内部,需要开发人员自己处理这个信息,同样这个信息也是在广播接收器里面获取,获取的标识如下
JPushInterface.ACTION_MESSAGE_RECEIVED
可以看到上面广播接收器当中有写具体获取,或者参照我的广播接收器代码
在截图中,message 便是我收到的自定义信息,我对这个自定义信息进行了分割判断,来确定我需要的操作,这个 message 里面存写的信息需要开发者自己制定。
以上就是咱们 Android 使用极光推送的一些进阶技能,更多的需要大家自己查阅官方开发文档以及 Demo:极光官方GitHub
官方API文档:极光推送安卓API
官方安卓Demo:安卓客户端官方Demo
同样,有问题可以联系我的QQ:5794431,或者联系官方QQ群:589310586
四:服务端推送
目前极光支持的服务端推送 SDK 有:JAVA;Python;PHP;C#;Node.js,或者可以使用通用推送接口 REST API,其他接口查询请点击这里服务端SDK,我在这里说下 JAVA 端的 SDK 使用
1:集成服务端推送环境
首先到这里下载jar包 :JAVA服务端SDK下载
将上面下载的4个 jar 包导入你的项目即可。
2:开始推送
JAVA 端推送非常简单,其实只需要一句话
PushResult result = jpushClient.sendPush(payload);
其中 result 就是推送反馈的结果,使用这句代码便完成了信息的推送,但是其中最重要的推送对象就是这个 payload,下面咱们详细说一下这个 paylod 对象。
(1):如果我们只需要发送一条通知,那么如下构建即可
这个对象的意思为:推送给安卓平台,推送给标签为: “tag1” 的用户,其中通知内容为 “ALERT”,标题为 “TITLE”,两个都是 String 类型,至此这个 payload 对象就设置好了。
(2):推送一条自定义信息,如下
这个对象的意思为:
1:推送给安卓和 IOS 平台;
2:推送给标签为: “tag1” 和 “tag2” 的人;还有别名为 “alias1” 和 “alias2” 的用户;
3:自定义信息的信息为 “MSG_CONTENT”;
4:并且附加了一段额外的 JSON 数据,名称为 ”extra”,内容为 “JPush”;
至此,咱们就构建好了一个发送自定义信息的payload对象。
payload 对象是推送的关键,payload 对象还有很多种构建类型,这里只举了两个例子,其他构建方法请查阅官方提供的 Demo :payload构建官方Demo
贴一下自己推送信息的详细代码,方便大家参考:
以上就是咱们 JAVA 端推送的一点小教程,具体希望大家参考官方 Demo 和官方 JAVA 推送 API :官方JAVA推送API
五:一点小技巧
我的项目是需要从一个安卓平台的服务端上推送信息给另一个安卓客户端,服务端调 REST API 请求发送消息,极光收到请求后,找出目标用户后将消息原样发给我们的客户端,之后客户端需要点击“确认”或者“拒绝”按钮。
那么问题来了:我怎么才能在服务端获取到客户端是否点击了按钮呢。
于是我想了半天,终于想到了一个点子:咱们假定安卓服务端为 A,安卓客户端为 B
1:申请包名与 A ,B 一致的两个极光应用,也对应命名为 A 项目,B 项目。
2:将 B 项目的客户端功能集成到 B 号客户端上,将 A 项目的客户端功能集成到 A 号服务端上,也就是在 A ,B 端都集成极光的 Android SDK,实现接收消息的功能。
3:如果要推送消息,A 服务端使用 B 的 AppKey 和 Master Secret 做调用验证,调 REST API 发推送请求给极光服务器,极光服务器就会推送消息给我的 B 号客户端。。
重点来了!!!!,敲黑板!!!!
4: B 客户端收到消息后,点击了“确认”按钮,这时候,我 B 号客户端使用 A 项目的 AppKey 和 Master Secret 做调用验证,调 REST API 发推送请求给极光服务器,发送一条为:“确认” 的自定义消息,这时候极光会把我这条消息推送给我的 A 号服务端,我 A 号服务端判断自定义信息为“确认”,就知道B号客户端点击了确认按钮,“拒绝按钮同理”!如图!
最重要的!!!!
如果你要使用这种方法,或者类似的要在客户端中调用 REST API 推送消息,那么一定要把自己的 AppKey 和 Master Secret 加密一下,不要明文显示在程序里面,因为这样有泄露的危险,官方也不建议这么做,如果没有必须的原因,尽量不要这么做!
六:总结
虽然开发只花了3天,但是前期查询极光的各项API接口以及看官方 Demo 还是花了不少时间,但是确实说,极光推送已经封装的非常好了,对开发者非常友好,使用也是非常的方便,而且推送到达率高,客户端保活也做得比较好,所以还是非常推荐各位朋友使用极光推送的。
最后我想聊一下有关于「沟通效率」方面的问题,我加了官方的支持 QQ 群,目前只有一位技术支持,每天都有很多人咨询问题,技术支持每个都会认真的回答,我这个时不时窥屏的人都替她累的慌,许多咨询问题的人常常不能一次性表述清楚自己的问题,比如:
(1):有的直接质问极光服务器是不是出问题了。
(2):有的就说「集成、升级、编译报错了」但不给出具体的报错信息。
(3):有的在拿到排查总结信息后没仔细看又重复提问等等。
我建议大家在提问、请求他人帮助时,将自己已有的信息( SDK 版本,报错,日志),已经做过的排查步骤先说清楚,可以大大提高沟通的效率,其他开发者可能遇到过一样的问题也会顺手告诉你。
对技术支持的工作,我也曾感同身受,以前我经常在学校帮别人修电脑,每每有同学很突兀的问我「我电脑上不去网了是怎么回事」的时候,我就想撞墙,我怎么知道为什么上不去啊,然后再一步步问他「之前做了什么」「哪里哪里看了没」「找别人的电脑、网络试过没」等等…
我想在群里解决我们问题的技术支持一定是一位温柔的小姐姐,所以才那么耐心。咱们既然是技术交流群,我觉得大家可以多多交流,互帮互助,像我平常有空的时候,看到有人问「自己懂的,不那么麻烦的问题」都比较乐意出来交流一下。
个人认为,搜索是解决问题的好办法,在官方文档、极光社区、其他技术社区、各大搜索引擎先用关键字搜索一遍,自己做一些排查工作,解决不了再咨询,并且在咨询的时候把自己做过的排查工作讲一下,肯定会提高问题解决的速度。
最后,希望本文能对有兴趣学习使用推送功能的同学有一些帮助,开发路上,共同学习,共同进步。
同时感谢极光,谢谢我的各位朋友,同学和各位看官,谢谢大家对我的支持!
「本文系极光征文 | 写写文章就能赢 Filco,岂不美滋滋的参赛文章」