基于MQTT协议推送Android消息
来源:互联网 发布:网络黄金egd的最新情况 编辑:程序博客网 时间:2024/05/21 10:11
对于消息推送,一开始还真不知道什么方式比较好,一头雾水,现在回顾总结下资料。
http://zheye.org/asks/4d99a1aafd503c41d700000a
通过上面者也里面的回复,得到一些信息。
1.官方的C2DM,但是只支持android2.2及以上平台的,而且使用的google的服务器。
对于google服务器的问题,网友应该都清楚,天朝的大中华区局域网总是让它不时的给你断一下。
2.第三方的androidpn,和C2DM一样,都是基于XMPP扩展的,是一个开源的项目,据说不错。
http://sourceforge.net/projects/androidpn/
但是是基于长连接的,如果客户端数量大,特别像手机这种都是长期在线的设备,
会有两个问题,(1)服务器压力,(2)手机的电池不够用啊,电量卡卡卡的被你耗光了(需要优化网络机制)。
3.使用IBM 的MQTT协议实现push消息
地址:http://tokudu.com/2010/how-to-implement-push-notifications-for-android/
这是一个非常理想的解决方案,是基于tcp协议的,低带宽通信,而且国外友人已经测试,耗电量很多哦~
都是E文的,不习惯看E文的,也没关系,有一前辈给整理了一个中文的:
《Android推送通知指南》http://blog.csdn.net/joshua_yu/article/details/6563587
看了上面这些文章的内容,完成上面的例子,
然后看看源码,应该明白一些了。
========================================
MQTT是一项消息传递技术,由IBM再2001年发布。
总结一下,机制就是使用一个代理服务器message broker,
客户端client连接上这个服务器,然后告诉服务器说,我可以接收哪些类型的消息,
同时,client也可以发布自己的消息,这些消息根据协议的内容,可以被其他client获取。
只要手机客户端,连上服务器,然后就可以接收和发布消息了,不用自己写socket什么了,
低带宽,低耗电量,代码量也少,很简单吧。
001
package
com.pig.test.mqtt;
002
003
import
com.ibm.mqtt.MqttClient;
004
import
com.ibm.mqtt.MqttException;
005
import
com.ibm.mqtt.MqttSimpleCallback;
006
007
public
class
SubscribeClient {
008
private
final
static
String CONNECTION_STRING =
"tcp://192.168.1.60:1883"
;
009
private
final
static
boolean
CLEAN_START =
true
;
010
private
final
static
short
KEEP_ALIVE =
30
;
//低耗网络,但是又需要及时获取数据,心跳30s
011
private
final
static
String CLIENT_ID =
"client1"
;
012
private
final
static
String[] TOPICS = {
013
"Test/TestTopics/Topic1"
,
014
"Test/TestTopics/Topic2"
,
015
"Test/TestTopics/Topic3"
,
016
"tokudu/client1"
017
};
018
private
final
static
int
[] QOS_VALUES = {
0
,
0
,
2
,
0
};
019
020
//////////////////
021
private
MqttClient mqttClient =
null
;
022
023
public
SubscribeClient(String i){
024
try
{
025
mqttClient =
new
MqttClient(CONNECTION_STRING);
026
SimpleCallbackHandler simpleCallbackHandler =
new
SimpleCallbackHandler();
027
mqttClient.registerSimpleHandler(simpleCallbackHandler);
//注册接收消息方法
028
mqttClient.connect(CLIENT_ID+i, CLEAN_START, KEEP_ALIVE);
029
mqttClient.subscribe(TOPICS, QOS_VALUES);
//订阅接主题
030
031
/**
032
* 完成订阅后,可以增加心跳,保持网络通畅,也可以发布自己的消息
033
*/
034
035
mqttClient.publish(PUBLISH_TOPICS,
"keepalive"
.getBytes(), QOS_VALUES[
0
],
true
);
036
037
}
catch
(MqttException e) {
038
// TODO Auto-generated catch block
039
e.printStackTrace();
040
}
041
}
042
043
/**
044
* 简单回调函数,处理client接收到的主题消息
045
* @author pig
046
*
047
*/
048
class
SimpleCallbackHandler
implements
MqttSimpleCallback{
049
050
/**
051
* 当客户机和broker意外断开时触发
052
* 可以再此处理重新订阅
053
*/
054
@Override
055
public
void
connectionLost()
throws
Exception {
056
// TODO Auto-generated method stub
057
System.out.println(
"客户机和broker已经断开"
);
058
}
059
060
/**
061
* 客户端订阅消息后,该方法负责回调接收处理消息
062
*/
063
@Override
064
public
void
publishArrived(String topicName,
byte
[] payload,
int
Qos,
boolean
retained)
throws
Exception {
065
// TODO Auto-generated method stub
066
System.out.println(
"订阅主题: "
+ topicName);
067
System.out.println(
"消息数据: "
+
new
String(payload));
068
System.out.println(
"消息级别(0,1,2): "
+ Qos);
069
System.out.println(
"是否是实时发送的消息(false=实时,true=服务器上保留的最后消息): "
+ retained);
070
}
071
072
}
073
074
/**
075
* 高级回调
076
* @author pig
077
*
078
*/
079
class
AdvancedCallbackHandler
implements
MqttSimpleCallback{
080
081
@Override
082
public
void
connectionLost()
throws
Exception {
083
// TODO Auto-generated method stub
084
085
}
086
087
@Override
088
public
void
publishArrived(String arg0,
byte
[] arg1,
int
arg2,
089
boolean
arg3)
throws
Exception {
090
// TODO Auto-generated method stub
091
092
}
093
094
}
095
096
/**
097
* @param args
098
*/
099
public
static
void
main(String[] args) {
100
// TODO Auto-generated method stub
101
new
SubscribeClient(
""
+ i);
102
103
}
104
105
}
broker服务器,MQTT的jar包,记得下载啊,没有就消息我咯~
========================================
到这里,如果完成IBM 的MQTT协议实现push消息的实例的,
都会有个问题,好像没考虑到安全问题,如果客户端连上来作乱怎么办呢?
上面用的broker时rsmb的,mqtt的简单服务器。
IBM已经推出了MQTT V3.1版本,已经加入了安全验证机制,不要怕啦。
据国外网友说,facebook在2011年8月就是用的mqtt v3.1做的应用哦。
- 基于MQTT协议推送Android消息
- 基于MQTT协议推送Android消息
- 基于MQTT协议推送Android消息
- 基于Mqtt协议Paho项目实现Android消息推送
- [Android实例] MQTT协议,Android消息推送
- 采用MQTT协议实现Android消息推送
- 用MQTT协议实现android消息推送
- android采用IBM-MQTT协议消息推送。
- 采用MQTT协议实现Android消息推送
- 采用MQTT协议实现Android消息推送
- 采用MQTT协议实现Android消息推送
- android消息推送——mqtt协议
- 采用MQTT协议实现Android消息推送
- 采用MQTT协议实现Android消息推送
- 采用MQTT协议实现android消息推送
- 采用MQTT协议实现Android消息推送
- 采用MQTT协议实现Android消息推送
- 采用MQTT协议实现Android消息推送
- Eclipse 报错:Error: Program "sh" not found in PATH
- Qt 无法启动此程序 计算机丢失Qt5Widgetsd.dll
- BCB6主应用调用dll中的模块作为子窗口范例
- HDU 4499 Cannon (暴力搜索,回溯)
- 那年WiFi和我一起考研
- 基于MQTT协议推送Android消息
- vs2010 c++ 在Debug时总是提示Cannot find or open the PDB file
- 快速Android开发系列通信篇之EventBus
- WinForm控件Anchor属性和Dock属性的区别
- 最全的Android开发资源整理--进阶必备
- 全排列
- Android消息推送(一)--AndroidPn(XMPP协议)Demo版到正式上线
- [转] 面向对象的三个基本特征(讲解)
- Ogre源码学习-Image和Texture