现在的移动应用中消息推送已经成为不可或缺的功能了,这样可以增加与用户的交互。
使用消息推送的方法有很多,原理大致是:移动端与消息服务器保持一个长连接,一旦服务器有消息就推给客户端,客户端收到消息做相应的处理。
消息推送 参考的实现方式:
1、XMPP协议实现的openfire可以作为消息服务器。客户端也有asmack封装好了xmpp协议。openfire提供了一套IM所需的所有功能,而且支持插件形式的二次开发。
2、开源项目androidpn,也是实现了XMPP协议。
3、JPush极光推送。等一系列第三方的推送平台。
各自的优缺点:
1、openfire提供了IM的所有功能,功能非常强大,但是移动端如果只想集成消息推送的话,openfire就显得很是笨重。而且openfire的二次开发资料很少,一般需针对公司的业务开发,使用公司自己的数据库。服务器端开发成本高,周期长。openfire的并发连接好像也只有5000左右(做的比较好的情况下,一般都达不到这个数)。移动客户端也要根据xmpp协议与openfire服务器进行交互来完成消息推送。所以客户端的开发周期也长。
2、androidpn也是实现的XMPP,但是只实现了核心的功能,也需要针对公司的业务进行二次开发。基本和openfire的缺点差不多。
3、JPush集成非常简单,客户端和服务端都不需要进行二次开发,只要配置一下就可以了,最多发送消息这块服务端需要调用一下Jpush的接口,就一个http请求,非常简单。
客户端集成步骤:
1、首先去JPush的开发者官网https://www.jpush.cn/ 注册帐号
2、用刚刚的帐号登录开发者网站
3、点击用户头像下的控制台https://www.jpush.cn/common/apps/
4、创建应用。
5、打开开发者网站的文档选项 http://docs.jpush.cn/display/dev/Index根据里面的集成步骤集成Jpush。
服务端集成:
客户端集成完,我们的移动端的app就可以收到通知和消息了,但是发消息需要到Jpush的开发者网站去发送,这样的话就很不合理。正常情况肯定是我们自己的服务器根据情况发送通知和消息到客户端的。不可能我们服务端需要发通知和消息的时候需要有个人去打开Jpush的网站去发送通知。
这些情况Jpush已经为我们想到了,我们服务器端只要在发通知的地方调用Jpush提供的发布接口就可以了,就是一个HTTP请求而已。
推送接口详细描述:http://docs.jpush.cn/display/dev/Push-API-v3
我们可以自己写代码发送http请求,这边有一个第三方的开源项目是对Jpush推送接口的封装:https://github.com/jpush/jpush-api-java-client
下载下来将src下的cn.jpush.api文件全部复制到服务端项目中,并且将libs下的jar包加入到工程的build path。
我们就是推送一条通知或者消息。
代码样例:
- //这是在极光网站上申请的密钥
- StringmasterSecret="1c59df909c3790cc7e1fc601";
- //应用的appKey,同样在网站上申请
- StringappKey="3c92c6395227cbe166d1a853";
- //建立JpushClient类,用来发送消息的对象
- JPushClientclient=newJPushClient(masterSecret,appKey);
- try{
- //client.sendNotificationAll("helloworld");
- //client.sendMessageAll("thisisamessage");
- PushPayloadpayload=PushPayload
- .newBuilder()
- .setPlatform(Platform.android_ios())
- .setNotification(Notification.alert("jPushisuseful!!")).setAudience(Audience.alias("xxx"))
- .build();
- client.sendPush(payload);
- }catch(APIConnectionExceptione){
- e.printStackTrace();
- }catch(APIRequestExceptione){
- e.printStackTrace();
- }
我们一般使用cn.jpush.api.JPushClient.sendPush(PushPayload pushPayload)这个方法就够了。
这是推送的一个方法,参数PushPayload可以用来构造通知和消息,并且可以进行细节的设置,比如:platform,alias,tag,消息或是通知。具体可以参考JPushClient类的
sendAndroidNotificationXXXXX和sendAndroidMessageXXXXXX方法,这些方法里面就是构造一个PushPayload。
到此集成结束。
服务端集成样例:服务端样例