在Android App中,经常受到各类推送,在手机息屏时,也能接收到像微博等等软件的推送消息,这一项技术是Android中必不可少的。
1、推送的实现
推送的实现有2种方式:客户端定时轮询(pull)和服务器主动推送(push)
(1)客户端定时轮询:客户端每次按照一定的时间间隔,去服务器查看是否有新的数据,如果有新的数据,那么就将新的数据拉取过来显示在服务器。但是这种方式存在的致命缺陷就是,如果数据的更新存在延时,当客户端去服务器查询数据时,没有更新数据,那么客户端就无法及时获取到数据,而出现异常,然而为了得到更新数据,而去频繁地向服务器读数据,将会非常消耗客户端的资源和性能。
(2)服务器主动推送:这种方式是当前主流的推送方式,客户端和服务器保持长连接,当服务器有新的数据更新时,会即时发送到客户端,当客户端接收到数据时,就会更新,而不需要频繁地去服务器查询数据;但这种方式同样也会存在弊端,因为保持了长连接,在多并发的环境下,会给服务器造成巨大的压力。
2、极光推送
目前在国内推送平台,极光推送是用户量最大的第三方平台。
(1)去极光推送平台,选择注册账号,创建应用,完成配置
(2)集成Android SDK
在SDK文件夹中,包含多种CPU架构,选择合适的.so文件集成到项目中(src/main/jniLibs);下面两个jar包,分别是极光推送的核心包和开发包,这部分放在libs目录下,并添加依赖。
(3)配置AndroidManifest文件
将SDK文件夹下的清单文件中的代码全部复制到项目的清单文件中,做相应的修改,当中关于测试的部分可以删除不要。
(4)将资源文件导入项目
在SDK文件夹下的res目录下的资源文件,全部导入项目当中。
(5)自定义广播接收器
<!-- User defined. For test only 用户自定义的广播接收器-->
<receiver
android:name="com.example.jpushdemo.MyReceiver"
android:enabled="true">
<intent-filter>
<action android:name="cn.jpush.android.intent.REGISTRATION" /> <!--Required 用户注册SDK的intent-->
<action android:name="cn.jpush.android.intent.MESSAGE_RECEIVED" /> <!--Required 用户接收SDK消息的intent-->
<action android:name="cn.jpush.android.intent.NOTIFICATION_RECEIVED" /> <!--Required 用户接收SDK通知栏信息的intent-->
<action android:name="cn.jpush.android.intent.NOTIFICATION_OPENED" /> <!--Required 用户打开自定义通知栏的intent-->
<action android:name="cn.jpush.android.intent.CONNECTION" /><!-- 接收网络变化 连接/断开 since 1.6.3 -->
<category android:name="${applicationId}" />
</intent-filter>
</receiver>
<!-- User defined. For test only 用户自定义接收消息器,3.0.7开始支持,目前新tag/alias接口设置结果会在该广播接收器对应的方法中回调-->
<!--since 3.3.0 接收JPush相关事件-->
<receiver android:name="com.example.jpushdemo.PushMessageReceiver">
<intent-filter>
<action android:name="cn.jpush.android.intent.RECEIVE_MESSAGE" />
<category android:name="${applicationId}"></category>
</intent-filter>
</receiver>
当前面的工作完成之后,在清单文件中只剩下广播接收器需要自行配置。
从SDK的demo中,可以选择复制其中的MyReceiver
,修改部分代码。
最后配置一下极光推送开发者平台的Appkey即可。
<!-- Required . Enable it you can get statistics data with channel -->
<meta-data android:name="JPUSH_CHANNEL" android:value="channel"/>
<meta-data android:name="JPUSH_APPKEY" android:value="开发者平台的AppKey" /> <!-- </>值来自开发者平台取得的AppKey-->
(6)在Applicaiton中初始化极光推送
//初始化极光推送
JPushInterface.init(this);
//日志
JPushInterface.setDebugMode(true);
3、极光推送测试
完成以上配置之后,可以进行推送测试
当去测试时,发现极光推送用户并没有注册成功,发送推送时,“预估人数为0”,这个问题还是在AndroidManifest文件中的配置出现了问题。
之前在配置时,并没有配置PushService
和PushMessageReceiver
,在极光3.0.0和核心包jCode2.0.0之前,不需要配置;但是在之前的环节中,引入的jar包均高于这几个版本,因此需要配置。
PushService
需要继承自JCommonService
,一般是个空方法;PushMessageReceiver
需要继承自JPushMessageReceiver
,配置完成之后,就可以看到注册成功 了。
发送推送,客户端接收到推送消息
以上只是极光推送的简单使用,后续在项目中使用时将会详细介绍