做推送,怎么能不了解推送的 4 种消息形式呢?( Android 篇)
极光推送是为 App 提供第三方推送服务的平台之一,它提供四种消息形式:通知,自定义消息,富媒体和本地通知。
笔者将基于官方说明与个人理解来谈一下这四种消息。本篇为 Android 篇,iOS 篇入口。
1.通知
Push Notification ,即指在手机的通知栏(状态栏)上会显示的一条通知信息。 Android : 依靠 JPush service ,由 JPush SDK 实现在手机通知栏的展示。
Android 通知消息的流程是这样的:
- 我们可以调用极光的 API 发起推送请求,也可以通过极光官网控制台推送。
- 请求在参数要求上基本正确——请求成功,返回 msgid (这条消息的 ID 标识),返回 200 (成功)或由极光判断的推送失败(一般是 1011 找不到目标的错误);参数错误,有返回错误码。
- 极光服务器处理该请求:
- 若该 App 长连接正常,极光服务器就会把这条消息在线下发给它。
- 如果长连接是断开的,那么就会免费保存 5 条离线消息。
- 如果该 App 在你推送消息时设定的离线保存时间(
time_to_live
) 时间内,重连上了长连接,该条消息就会下发给 App 。 - 如果离线时间内,推送的消息超过 5 条,最先保存的消息会被删掉。
- 如果过了
time_to_live
,该条消息也会被删掉,没有收到的 App 就不会再收到了。
- 如果该 App 在你推送消息时设定的离线保存时间(
- 这里涉及到长连接断开的问题:
- RTC 会定时发送心跳去触发连接。
- 断网,关机,进程不在(被杀死),主动调用 stoppush 都会导致断开。
- 一些手机系统的限制会导致断网和进程不在。
- 解决办法:添加极光提供的拉起服务;文档提示用户对 App 进行保护。 Android 收不到消息的情况,极光社区也有一个总结说明。
- App 收到了通知,由 JPush SDK 进行展示,和 iOS 一样,如果通知内容( alert )为空,也是默认不展示的, 但能获取到消息中的数据,以作他用。
- 我们可以简单的修改这个通知栏的样式。
- 在客户端定制了通知栏样式后,需要使用该通知栏时,在推送的时候就 记得要写对应的通知栏编号。( API 推送时, V2 接口的字段是
n_builder_id
, V3 接口的字段是builder_id
。 V2 功能较少,且在 2015 年已不再维护,建议大家尽快升级 V3 ,可以帮助我们更好的做推送。) - 这里容易有问题的是图标显示不正常,解决方案:
- 若没有
res/drawable-xxxx/jpush_notification_icon
这个资源,那么通知栏默认使用应用图标作为通知 icon 。 - 在 5.0 以上系统将应用图标作为
statusbar icon
可能显示不正常,我们可以定义 没有阴影和渐变色的 icon 同名替换res/drawable-xxxx/jpush_notification_icon
这个文件。 - 应该将 res 文件夹下的 所有 icon 文件都替换成自己的图标文件。
- 还有一个可能是:小米手机的 launcher 缓存可能有 bug ,按照上述要求配置好后, 重启手机,再测试。
- 若没有
- 点击该条通知消息:
- 如果我们在
AndroidManifest.xml
里没有配置Action - cn.jpush.android.intent.NOTIFICATION_OPENED
, JPush SDK 默认打开 App 首页,相当于点击桌面图标的效果。 - 如果我们需要做点击跳转,那么就得在
AndroidManifest.xml
里配置此receiver action
, SDK 在点击后不会做动作。我们需要在自己写的BroadcastReceiver
类里处理,打开某Activity
。 - 这里可能遇到的问题是:某些手机系统下, App 从后台退出了,但是能收到通知消息,点击却没有反应,无法跳转。
- 可能的原因: Android 应用退出后,可能长连接还存在,所以能收到消息,但是由于手机系统对 App 的限制,导致点击通知栏不能重启 App 成功。
- 解决办法:打开手机系统的限制。
- 具体会出现该情况的手机系统和后台退出后还能收到消息的前提条件(是否需要将 JPush 相关组件设置为一个独立进程)等还没有测试验证过。
- 如果我们在
- Android 关闭通知: 可以达到关闭通知效果的有两个办法,我们可以根据自己的需求去选用,如果在 UI 层面加一个关闭的按钮,那么对应的代码层面也是去选用这两种 API 。
- 调用 stoppush :
- 一种本地的状态操作,相当于手动终止 push 服务的效果,这个会导致同时关掉对所有类型消息的接收。
- 极光推送所有的其他 API 调用都无效。
- 必须调用 resumepush 才能恢复推送服务。
- 恢复后,如果推送的消息还在
time_to_live
内,客户端会收到这条消息。
- 置空别名 /标签(极光官网有总结一个 别名的高级应用场景可以仔细阅读一下)
- 一般需求是:用户退出登录后不要收到通知。 对应的操作是:项目的用户退出登录—置空别名—点击登录—重设别名。
- 如果用户是直接杀死 A 手机的 App ,然后在 B 手机登录。 若你们不允许多设备登录,希望 A 手机不再收到消息,那么应该在自己的后台判断出 A 用户“ 换了设备登录” ,让 A 手机自动做登出操作,在客户端置空别名; 或者在服务端调用极光的 API去置空 A 手机设置的别名。 (判断的方法可以是:将用户某唯一信息与获取到的 registrationID 一起上传, registrationID 与之前相比改变了,则判断为更换了设备。)
- 需要注意:别名置空 至 重设别名 期间,推送的消息, 在重设别名后,设备不会收到。 若需要这期间的消息也被收到,需要自己服务器对此进行判断、保存、并在客户端重设别名后,重新向极光发起推送请求。 若需要用户的历史推送消息可被查询,需要自己服务器那边去保存。
- 调用 stoppush :
2.自定义消息
iOS 需要当 App 处于前台才能收到, Android 不需要处于前台。
几个特点
- 只接收,不展示,需要我们自己做接收处理,并且自己代码实现 消息的展示。
- 自定义消息内容
msg_content
为空时, SDK 不会对消息进行广播, App 无法接收到推送的消息。 - 需要依靠 App 与极光服务器建立的长连接。
- Android 需要我们在
AndroidManifest.xml
里配置Action - cn.jpush.android.intent.MESSAGE_RECEIVED
,并且在自己写的BroadcastReceiver
里接收处理,详细看官方文档说明。
什么时候使用它?
主要用于应用的内部业务逻辑和特殊展示需求,譬如:
- 需要自定义通知栏时( Android 要播放自定义的声音文件等情况)。
- 在 App 项目内的消息提醒。
- 有条件的消息提醒(譬如只让处在某一页面的用户看到该条消息)。
可能会犯的错误
弄混自定义内容(字段 extras )与自定义消息( Message )
- 一般会出现的疑问是: Android 点击通知栏无法获取到自定义的内容
- 推送时 extras 是写在 Notification 下还是 Message 下?
- 点击 SDK 的通知栏 用
JPushInterface.EXTRA_EXTRA
获取的是写在 Notification 下的 extras 信息,没法获取写在 Message 下的 extras 。 - Message 消息和 Notification 消息 分别有各自的参数,不要混用。
3.富媒体
可以推送 Web 页面、图片、声音等除普通文本之外更丰富的内容。
- 两种:信:息流模板推送、 URL 富媒体链接推送
- 信息流模板推送
- 推送 Web 页面(富文本);
- 极光官网控制台上有创建富文本页面的功能模块,提供了 5 种模板;
- 富文本作为通知推送到客户端;
- 客户端点击通知,自动展示该富文本页面。
- URL 富媒体链接推送
- 推送某个页面的 URL ,点击通知栏消息后跳转到这个 URL 指定的页面。
- 信息流模板推送
- 仅支持 Android ,需要 JPush Android SDK 1.8.0 及以上。
- 只能通过极光推送的控制台发送。
- 必须将压缩包 res 中的资源放到我们自己的项目的对应文件夹,并按照官方示例
AndroidManifest
配置 PushActivity 组件。
4.本地通知
适用于在特定时间发出的通知,如一些 Todo 和闹钟类的应用,在每周、每月固定时间提醒用户回到应用查看任务
几个特点
- 不依赖于网络,无网也可以触发。
- 定时时间是自发送时算起,不受中间关机等操作的影响。
- 本地通知与远程推送的通知是相互独立的,不受 保留最近通知条数上限( Android )的限制。
- Android依旧需要 App 应用程序在运行。
规则
- 本地推送保存在本地的 db 中,时间上的控制也是从 db 里面取。
- 关机或者杀进程后将收不到本地通知。
- 进程重启后,会检测 db ,准备设定时间在此之后的本地通知的推送。
- 本地通知的时间也依赖于每 4 分 50 秒的心跳来检测,所以并不能特别精准地刚好到了通知时间你刚好启动了进程,就能收到推送,会有一定偏差。
作者:末日云游-极光
做推送,怎么能不了解推送的 4 种消息形式呢?( Android 篇)的更多相关文章
- 做推送,怎么能不了解推送的 4 种消息形式呢?(iOS 篇)
极光推送是为 App 提供第三方推送服务的平台之一,它提供四种消息形式:通知,自定义消息,富媒体和本地通知.笔者将基于官方说明与个人理解来谈一下这四种消息.本篇为 iOS 篇,Android 篇入口. ...
- Android 几种消息推送方案总结
转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/6241354.html 首先看一张国内Top500 Android应用中它们用到的第三方推送以及所占数量: 现 ...
- 推送通知/传感器/UIDynamic仿真(推送通知已适配iOS10)
推送通知/传感器/UIDynamic 一.推送通知 1.推送通知简介 什么是推送通知 此处的推送通知与NSNotification没有任何关系 可以理解为,向用户推送一条信息来通知用户某件事情 作用: ...
- iOS的推送机制APNs:本地推送&远程推送
本地推送: 本地推送主要应用在备忘录,闹钟等本地的,基于时间定时的消息提醒.本篇不做详细描述. 远程推送:APNS(苹果推送通知服务) iOS远程推送机制的原理及流程: 注册推送(橙色部分):若该Ap ...
- 与众不同 windows phone (9) - Push Notification(推送通知)之概述, 推送 Toast 通知
原文:与众不同 windows phone (9) - Push Notification(推送通知)之概述, 推送 Toast 通知 [索引页][源码下载] 与众不同 windows phone ( ...
- Windows Phone开发(43):推送通知第一集——Toast推送
原文:Windows Phone开发(43):推送通知第一集--Toast推送 好像有好几天没更新了,抱歉抱歉,最近"光荣"地失业,先是忙于寻找新去处,唉,暂时没有下文.而后又有一 ...
- 推送之HelloWorld及个推Smart Push
最近有个朋友想要推送一些消息到自己的APP上,自己用了HTTP轮询的方式比较耗电,也比较占用流量,一旦用户关闭了进程,消息则很难触达,于是,咨询我有没有什么好的解决方案.我告诉他其实可以使用推送,他瞪 ...
- java推送数据到app--极光推送
之前项目有用到需要把数据推送到app端 采用的是极光推送 特此把工具类和pom.xml需要的jar整理如下 pom.xml需要jar如下 <!-- 极光推送 --> <depende ...
- Windows Phone 推送通知的第四类推送
在 MSDN 文档有关 Windows Phone 推送通知 有关推送的内容包含 Tile.Toast.Raw 这三种通知.这三种通知 的方式类似,运用的场合不同,这里不再赘述,它们的运行原理类似: ...
随机推荐
- 手动写一个Servlet
一.做一个类,派生自HttpServlet 1.导两个包 javax.servlet.*; javax.servlet.http.* 2.重写两个方法doGet,doPost 打开tomcat中的se ...
- 云脉推出表格识别API接口可以自助接入
针对如今市场上对于海量票据信息的录入需求,近期厦门云脉技术有限公司推出票据识别相关的产品与服务,更是在云脉OCR SDK开发者平台上上线表格识别API接口,供广大开发者和集成商自助接入.为了降低财务系 ...
- STM8S003/005/007芯片解密单片机解密程序提取复制经验分享!
STM8S003/005/007芯片解密单片机解密程序提取复制 芯片解密型号: STM8S003K3T6,STM8S005K6T6,STM8S007C8T6,STM8S003F3P6 STM8S005 ...
- 使用YUIDoc生成JS文档
其实YUIDoc主页已经写的比较清晰了,但有一些概念和细节再点出一些注意的地方. 目前最新的YUIDoc使用nodejs进行开发安装和使用都非常的方便. 我们只需要将我们的代码加上必要的注释,便可以很 ...
- ubuntu 安装chrome浏览器
对于一个一直用chrome的人来说,真的很不习惯用firefox,虽然firebug很好用.. 好吧,心情不佳,直接上命令: 下载命令(有墙,下不下来,多试几次): wget https://dl.g ...
- 【angularjs】【学习心得】ng-class总结
原文:http://www.imooc.com/wenda/detail/236998 今天来说一点angularjs中看起来很简单但是实践起来又有不少问题的ng-class吧 ----------- ...
- HDU-1430-素数回文
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1431 这题之前做过,又不会做了, 思路先直接暴力,输入a=5 b=500000000得到最大的值为9 ...
- BNU Online Judge-34777-Magical GCD
题目链接 http://www.bnuoj.com/bnuoj/problem_show.php?pid=34777 题意 如样例 输入 1530 60 20 20 20 输出 80 如 30 和 ...
- ARPU值分析
每用户平均收入(“ARPU)它由一个消费群体消费总额除以群体总人数得到. 活跃付费账户(“APA”) 平均同时在线玩家人数(“ACU”) 最高同时在线玩家人数(“PCU”)同时在线玩家数最高峰. 千人 ...
- Word常用实用知识3
纯手打,可能有错别字,使用的版本是office Word 2013 转载请注明出处 http://www.cnblogs.com/hnnydxgjj/p/6322813.html,谢谢. 分页符分页 ...