android消息推送GCM、XMPP、MQTT三种方案的优劣如下:
成都创新互联公司专注为客户提供全方位的互联网综合服务,包含不限于成都做网站、成都网站制作、黄平网络推广、成都小程序开发、黄平网络营销、黄平企业策划、黄平品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们最大的嘉奖;成都创新互联公司为所有大学生创业者提供黄平建站搭建服务,24小时服务热线:18982081108,官方网址:www.cdcxhl.com
1、GCM
(1)优点:提供的服务、原生、简单,无需实现和部署的服务端。
(2)缺点:Android版本限制(必须大于2.2版本),该服务在国内不够稳定、需要用户绑定相关的Google帐号,而且只受限于Google。
2、XMPP
(1)优点:成熟、强大、可扩展也性强、目前主要应用于聊天系统中,且已有开源的Java版的开发实例androidpn。
(2)缺点:协议较复杂、冗余(基于XML)、也比较费流量和费电,部署硬件成本高。
3、MQTT
(1)优点:简洁、小巧、可扩展性强、是比较省流量、省电。目前已有C++版的服务端组件rsmb。
(2)缺点:不够成熟、实现起来较复杂、服务端组件rsmb不开源,也是部署硬件成本较高。
消息推送软件可以使用深圳极光的。极光成立于2011年;凭借领先的人工智能及机器学习技术,极光将在APP消息推送、用户增长与活跃等方面为客户提供服务。
Android 几种消息推送方案总结:
一、使用GCM(Google Cloude Messaging)
Android自带的推送GCM可以帮助开发人员给他们的Android应用程序发送数据。它是一个轻量级的消息,告诉Android应用程序有新的数据要从服务器获取,或者是一个消息,其中包含了4KB的payload data(像即时通讯这类应用程序可以直接使用该payload消息)。
GCM服务处理排队的消息,并把消息传递到目标设备上运行的Android应用程序。
二、使用XMPP协议(Openfire+Spark+Smark)
XMPP是一种基于XML的协议,它继承了在XML环境中灵活的发展性,有很强的可扩展性。包括上面讲的GCM服务器底层也是采用XMPP协议封装的。
三、使用MQTT协议(想了解更多可以看)轻量级的、基于代理的“发布/订阅”模式的消息传输协议。
四、HTTP轮循方式。定时向HTTP服务端接口(Web Service API)获取最新消息。
五、采用第三方服务。客户端只需要导入第三方提供的lib库,有第三方管理长连接,负责消息的接收/发送。同时对消息都有比较详细的报表数据,可以用于做数据分析、挖掘,改善用户体验。
中合对比还是采用第三方服务简捷高效。比如极光推送就很好用,极光推送搭建起一个高度稳定、可扩展的云端架构,极大地帮助移动应用开发者节约开发和维护的成本,轻松实现毫秒级的精准推送。
首先第一、与服务器建立好连接
关键代码:127.0.0.1为服务器IP,5222为服务器端口号
[java] view plain copy print?
/**
* 连接服务器
*
* @return
*/
public boolean conServer() {
ConnectionConfiguration config = new ConnectionConfiguration(
127.0.0.1, 5222);
/** 是否启用安全验证 */
config.setSASLAuthenticationEnabled(false);
/** 是否启用调试 */
// config.setDebuggerEnabled(true);
/** 创建connection链接 */
try {
connection = new XMPPConnection(config);
/** 建立连接 */
connection.connect();
return true;
} catch (XMPPException e) {
e.printStackTrace();
}
return false;
}
第二、实现注册
关键代码:
以下代码注释都很清楚了,如有不懂的地方可以留言,这里就不多做解释了。
[java] view plain copy print?
/**
* 注册
*
* @param account 注册帐号
* @param password 注册密码
* @return 1、注册成功 0、服务器没有返回结果2、这个账号已经存在3、注册失败
*/
public String regist(String account, String password) {
if (connection == null)
return "0";
Registration reg = new Registration();
reg.setType(IQ.Type.SET);
reg.setTo(ClientConServer.connection.getServiceName());
reg.setUsername(account);// 注意这里createAccount注册时,参数是username,不是jid,是“@”前面的部分。
reg.setPassword(password);
reg.addAttribute("android", "geolo_createUser_android");// 这边addAttribute不能为空,否则出错。所以做个标志是android手机创建的吧!!!!!
PacketFilter filter = new AndFilter(new PacketIDFilter(
reg.getPacketID()), new PacketTypeFilter(IQ.class));
PacketCollector collector = ClientConServer.connection
.createPacketCollector(filter);
ClientConServer.connection.sendPacket(reg);
IQ result = (IQ) collector.nextResult(SmackConfiguration
.getPacketReplyTimeout());
// Stop queuing results
collector.cancel();// 停止请求results(是否成功的结果)
if (result == null) {
Log.e("RegistActivity", "No response from server.");
return "0";
} else if (result.getType() == IQ.Type.RESULT) {
return "1";
} else { // if (result.getType() == IQ.Type.ERROR)
if (result.getError().toString().equalsIgnoreCase("conflict(409)")) {
Log.e("RegistActivity", "IQ.Type.ERROR: "
+ result.getError().toString());
return "2";
} else {
Log.e("RegistActivity", "IQ.Type.ERROR: "
+ result.getError().toString());
return "3";
}
}
}
第三、实现登录
关键代码: 代码很简单不做太多解释
[java] view plain copy print?
/**
* 登录
*
* @param a 登录帐号
* @param p 登录密码
* @return
*/
public boolean login(String a, String p) {
try {
if (connection == null)
return false;
/** 登录 */
connection.login(a, p);
return true;
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
第四、修改密码
关键代码:同样很简单
[java] view plain copy print?
/**
* 修改密码
* @param connection
* @return
*/
public static boolean changePassword(XMPPConnection connection,String pwd)
{
try {
connection.getAccountManager().changePassword(pwd);
return true;
} catch (Exception e) {
return false;
}
}
android消息推送GCM、XMPP、MQTT三种方案的优劣:
1、GCM服务(Google Cloud Messaging)优点:Google提供的服务、原生、简单,无需实现和部署服务端。缺点:Android版本限制,该服务在国内不够稳定、需要用户绑定Google帐号,受限于Google。
2、XMPP协议(Openfire + Spark + Smack)优点:协议成熟、强大、可扩展性强、目前主要应用于许多聊天系统中,且已有开源的Java版的开发实例androidpn。缺点:协议较复杂、冗余(基于XML)、费流量、费电,部署硬件成本高。
3、MQTT协议优点:协议简洁、小巧、可扩展性强、省流量、省电,目前已经应用到企业领域,且已有C++版的服务端组件rsmb。缺点:不够成熟、实现较复杂、服务端组件rsmb不开源,部署硬件成本较高。
d消息推送可以去了解一下极光,极光是个不错的平台。极光紧密围绕移动开发者需求,打造的开发者服务平台,可以提供一站式SaaS服务,通过全面覆盖PC、手机、传感器、无线路由器等多种设备数据,打造全域数据平台。当前,不断更新的SaaS产品及服务已深受国内百万开发者的认可和信赖。
04-24 00:51:37.885: W/System.err(329): java.lang.IllegalStateException: Not connected to server.
04-24 00:51:37.885: W/System.err(329): at org.jivesoftware.smack.XMPPConnection.sendPacket(XMPPConnection.java:488)
04-24 00:51:37.885: W/System.err(329): at org.jivesoftware.smack.NonSASLAuthentication.authenticate(NonSASLAuthentication.java:69)
04-24 00:51:37.895: W/System.err(329): at org.jivesoftware.smack.SASLAuthentication.authenticate(SASLAuthentication.java:353)
04-24 00:51:37.895: W/System.err(329): at org.jivesoftware.smack.XMPPConnection.login(XMPPConnection.java:230)
04-24 00:51:37.895: W/System.err(329): at org.jivesoftware.smack.Connection.login(Connection.java:353)
04-24 00:51:37.895: W/System.err(329): at com.wxs.model.User.login(User.java:200)
04-24 00:51:37.895: W/System.err(329): at com.wechat.project.activity.LoginAcitivity$4$1.run(LoginAcitivity.java:78)
04-24 00:51:37.905: W/System.err(329): at java.lang.Thread.run(Thread.java:1096)
其他推送方式还有:C2DM、轮询、SMS、MQTT协议、XMPP协议等等,相对于这些推送方式,第三方推送方式的特点分别是:
请记住一个潜规则:操作系统是不会杀死属于自己品牌的推送服务。
当今市场上的Android手机系统份额最高是MIUI系统,即小米(具体排名请看 )
因为:免费、到达率高且在Android系统市场份额第一的MIUI系统上不被杀死。所以,如果要选择手机厂商的推送服务, 请选择小米推送作为第三方平台实现推送服务
下面一些应用可以从侧面来证明我的推断:
请记住一个规则:推送系统会共享一条推送渠道
所以说,关于如何选择第三方平台类的推送,推送平台的规模效应就很重要了。
那如何得知他们的规模和市场份额呢?按个人经验,主要看两点:
BAT大厂其实并没有什么优势, 同时谨记:
所以,大家可根据自己的使用场景来进行消息推送平台的选择。
通常第三方推送平台都支持两种推送消息类型:通知栏消息和透传消息。
不定期分享关于 安卓开发 的干货,追求 短、平、快 ,但 却不缺深度 。