消息推送原理
使用xmpp协议保持长连接,实现即时通讯。xmpp协议是不同于http协议比较轻量的适合消息推送的协议,http协议和xmpp协议都是基于Tcp协议保持连接。xmpp协议介绍看http://baike.so.com/doc/6954421-7176853.html。http协议看http://baike.so.com/doc/5366073-5601774.html。
除此之外客户端需要实现心跳包,每隔一分钟发一两次消息给服务器证明自己还在线。避免服务器漏发消息。xmpp协议使用xml格式文档进行传输。
消息推送的应用场景
广告,聊天,版本升级包的推送。
如果没有能力开发消息推送系统,我们可以使用第三方平台来实现消息推送,比如极光消息推送。见http://docs.jiguang.cn/jpush/client/Android/android_guide/。上传应用,获得appkey,按此页面要求配置Android工程。使用一个Recevier来接收消息(消息又可分为通知,自定义消息,富流媒体),可以直接在网页后台发送消息,也可以使用服务器接口API来发送消息。
Receiver中onReceive方法
Bundle bundle = intent.getExtras();
Log.d(TAG, "onReceive - " + intent.getAction());
if (JPushInterface.ACTION_REGISTRATION_ID.equals(intent.getAction())) {
} else if (JPushInterface.ACTION_MESSAGE_RECEIVED.equals(intent
.getAction())) {
System.out.println("收到了自定义消息。消息内容是:"
+ bundle.getString(JPushInterface.EXTRA_MESSAGE));
// 自定义消息不会展示在通知栏,完全要开发者写代码去处理
} else if (JPushInterface.ACTION_NOTIFICATION_RECEIVED.equals(intent
.getAction())) {
System.out.println("收到了通知");
// 在这里可以做些统计,或者做些其他工作
String title = bundle
.getString(JPushInterface.EXTRA_NOTIFICATION_TITLE);
String content = bundle.getString(JPushInterface.EXTRA_ALERT);
String extras = bundle.getString(JPushInterface.EXTRA_EXTRA);
Log.d(TAG, "标题: " + title);
Log.d(TAG, "内容: " + content);
Log.d(TAG, "附加: " + extras);
} else if (JPushInterface.ACTION_NOTIFICATION_OPENED.equals(intent
.getAction())) {
System.out.println("用户点击打开了通知");
// 在这里可以自己写代码去定义用户点击后的行为
String extras = bundle.getString(JPushInterface.EXTRA_EXTRA);
Log.d(TAG, "附加: " + extras);
// 解析json, 执行相应逻辑
} else {
Log.d(TAG, "Unhandled intent - " + intent.getAction());
}
}
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请
点击举报。