推送的集成
常用概念
推送:从服务器把消息实时发到客户端app上,这就是推送,推送可用于发送系统通知、发送推荐信息、发送聊天消息等等。别名:用于给移动设备取个好记的名字,比如电脑有计算机名,可以把别名理解为开发者给移送设备起的外号。不过,多个移动设备可以起一样的别名,这几个设备就会同时收到发给该别名的消息。
标记:用于给移动设备打标签,可以理解为分类,比如超市里的泰国大米既可以打上“粮食制品”的标签,也可以打上“进口商品”的标签。服务器可以统一给某个种类的移动设备发送消息;如果移动设备打上本设备手机号码的标签,那么服务器就能该号码的手机单独发消息。
自定义消息:推送的消息内容一般由sdk直接展示在系统的通知栏,不过有时候我们希望由自己控制展示通知的时机,比如说要预先处理某项事务,或者说以对话框形式展现消息等等,在这些时候,自定义消息就派上用场了,app可以先接收服务器发来的自定义消息,然后自主选择接下来的处理逻辑。
集成步骤
推送sdk都分为客户端与服务端两块,开发者在客户端app上集成客户端sdk,还得在服务器的程序上集成服务端sdk。不过推送客户端与服务端sdk并不直接通信,它们之间必须通过推送厂商的推送服务器来中转。下面是推送sdk集成时的数据流转过程:1、集成了客户端sdk的app启动之后,要先进行初始化(注册)操作,即客户端sdk向推送服务器(推送厂商)发送初始化请求(包含appkey、master secret),推送服务器给该移动设备分配一个唯一标识。
2、客户端sdk向推送服务器发送别名与标记设置,推送服务器给该移动设备登记相应的别名与标记。
3、客户端sdk向推送服务器发送开启推送请求,推送服务器表示知道了,接下来如果有消息就会告诉你。
4、服务端sdk封装消息推送请求,包括appkey、master secret、别名、标记、推送内容等等信息。
5、服务端sdk向推送服务器发送消息推送请求,推送服务器首先校验appkey和master secret是否合法;校验通过,再根据别名和标记挑出需要接收通知的客户端设备集合;最后把推送内容分别推送到符合条件的客户端设备上。
极光推送
极光推送是使用量较大的一个推送sdk,支持ios、android、winphone等平台。极光推送的客户端sdk包为jpush-android-2.1.5.jar,服务端sdk包为jpush-client-3.2.9.jar,服务端的sdk还依赖于gson、slf4j、log4j等jar包。推送调用的接口
在APP上启用极光推送,用到的是JPushInterface类,下面是JPushInterface的常用方法说明:init : 初始化。可在MainApplication或者MainActivity中调用。
stopPush : 暂停接收通知。
resumePush : 恢复接收通知。
isPushStopped : 判断推送是否停止
getRegistrationID : 获取注册id。
setAliasAndTags : 设置本设备的别名与标记。如果服务器指定向某个手机号码推送消息,则app调用该方法把手机号码设置为别名或标记。
setAlias : 设置别名。
setTags : 设置标记。
clearAllNotifications : 清除所有通知。
setPushNotificationBuilder : 设置通知栏样式。类型为1表示使用基本样式,为2表示使用自定义样式。
setPushTime : 设置接收通知的时间段。可设置周一到周日,每天的起始时间与结束时间。
推送事件的广播
极光推送的各事件都是靠广播发出来,并不使用监听器,所以我们要在app中自定义广播接收器来处理事件。下面是极光推送几个常用的事件介绍:1、JPushInterface.ACTION_REGISTRATION_ID
表示注册SDK的事件,对应的intent-filter是<action android:name="cn.jpush.android.intent.REGISTRATION" />
2、JPushInterface.ACTION_MESSAGE_RECEIVED
表示接收自定义消息的事件,对应的intent-filter是<action android:name="cn.jpush.android.intent.MESSAGE_RECEIVED" />
3、JPushInterface.ACTION_NOTIFICATION_RECEIVED
表示接收通知的事件,对应的intent-filter是<action android:name="cn.jpush.android.intent.NOTIFICATION_RECEIVED" />
4、JPushInterface.ACTION_NOTIFICATION_OPENED
表示点击通知栏的事件,对应的intent-filter是<action android:name="cn.jpush.android.intent.NOTIFICATION_OPENED" />
5、JPushInterface.ACTION_RICHPUSH_CALLBACK
表示接收富文本(如网页、多媒体等等)回调的事件,对应的intent-filter是<action android:name="cn.jpush.android.intent.ACTION_RICHPUSH_CALLBACK" />
6、JPushInterface.ACTION_CONNECTION_CHANGE
表示网络连接变化(连上、断开)的事件,对应的intent-filter是<action android:name="cn.jpush.android.intent.CONNECTION" />
下面是在AndroidManifest.xml注册极光广播接收器的xml例子:
<receiv