MqttAsyncClient 的静态方法, 根据 AppKey (来自portal) 实例化 MqttAsyncClient
public static MqttAsyncClient createMqttClient(String appkey) throws MqttException, JSONException
名称 | 类型 | 说明 |
---|---|---|
appKey | String | YunBa Portal 中注册的 App Key |
final MqttAsyncClient mqttAsyncClient = MqttAsyncClient.createMqttClient("52fcc04c4dc903d66d6f8f92");
//mqttAsyncClient.setCallback(new MqttCallback())
MqttAsyncClient 对象的回调函数,用来接受消息,处理连接断开等事件。
public void setCallback(MqttCallback callback)
名称 | 类型 | 说明 |
---|---|---|
callback | MqttCallback | 处理消息到达,服务器状态变化等事件 |
mqttAsyncClient.setCallback(new MqttCallback() {
@Override
public void messageArrived(String topic, MqttMessage message) throws Exception {
System.out.println("mqtt receive topic = " + topic + " msg = " + new String(message.getPayload())) ;//reciver msg from yunba server
}
@Override
public void deliveryComplete(IMqttDeliveryToken token) {
}
@Override
public void connectionLost(Throwable cause) {
System.out.println("mqtt connectionLost");
}
MqttAsyncClient 连接到 YunBa Server, 只有连接成功后才能调用 subscribe, publish 等 API。
public void connect(IMqttActionListener mqttAction)
名称 | 类型 | 说明 |
---|---|---|
mqttAction | IMqttActionListener | 成功会回调 onSuccess, 失败回调 onFailure |
mqttAsyncClient.connect(getApplicationContext(),topic,
new IMqttActionListener() {
@Override
public void onSuccess(IMqttToken asyncActionToken) {
// do subscibe, publish....
}
@Override
public void onFailure(IMqttToken asyncActionToken, Throwable exception) {
if (exception instanceof MqttException) {
MqttException ex = (MqttException)exception;
System.err.println("connect to server failed with the error code = " + ex.getReasonCode());
}
}
}
);
App 可以订阅一个或者多个 Topics, 以便可以接收来自 Topic 的 Message.
public void subscribe(String topic, IMqttActionListener mqttAction)
public void subscribe(String[] topics, IMqttActionListener mqttAction)
名称 | 类型 | 说明 |
---|---|---|
topic | String | app 订阅的的频道,取值范围详见 参数说明 |
topics | String[] | app 订阅的的频道数组列表,取值范围详见 参数说明 |
mqttAction | IMqttActionListener | 成功会回调 onSuccess, 失败回调 onFailure |
mqttAsyncClient.subscribe(topic, new IMqttActionListener() {
@Override
public void onSuccess(IMqttToken asyncActionToken) {
// do publish...
}
@Override
public void onFailure(IMqttToken asyncActionToken, Throwable exception) {
if (exception instanceof MqttException) {
MqttException ex = (MqttException)exception;
System.err.println("subscribe failed with the error code = " + ex.getReasonCode());
}
}
}
);
App 可以取消订阅一个或者多个 Topics, 以便取消接收来自 Topic 的 Message.
public void unsubscribe(String topic, IMqttActionListener mqttAction)
public void unsubscribe(Context context, String[] topics, IMqttActionListener mqttAction)
名称 | 类型 | 说明 |
---|---|---|
topic | String | app 订阅的的频道,取值范围详见 参数说明 |
topics | String[] | app 订阅的的频道数组列表,取值范围详见 参数说明 |
mqttAction | IMqttActionListener | 成功会回调 onSuccess, 失败回调 onFailure |
mqttAsyncClient.unsubscribe(topic,new IMqttActionListener() {
@Override
public void onSuccess(IMqttToken asyncActionToken) {
//...
}
@Override
public void onFailure(IMqttToken asyncActionToken,Throwable exception) {
if (exception instanceof MqttException) {
MqttException ex = (MqttException)exception;
System.err.println("connect to server failed with the error code = " + ex.getReasonCode());
}
}
}
);
App 可以向 Topic 发送消息, 那么任何订阅此 Topic 的 Client 都会接受到消息。
public void publish(String topic, String message,IMqttActionListener mqttAction))
public void publish(String topic, String message, Map opts, IMqttActionListener mqttAction)
名称 | 类型 | 说明 |
---|---|---|
topic | String | app 订阅的的频道,取值范围详见 参数说明 |
message | String | 向目标 topic 的订阅者发布的消息 |
opts | Map | 向目标 topic 的订阅者发布的消息的选项:如消息有效时间,目标平台等等 |
mqttAction | IMqttActionListener | 成功会回调 onSuccess, 失败回调 onFailure |
mqttAsyncClient.publish(topic, msg, new IMqttActionListener() {
@Override
public void onSuccess(IMqttToken asyncActionToken) {
String[] topic = asyncActionToken.getTopics();
//....
}
@Override
public void onFailure(IMqttToken asyncActionToken, Throwable exception) {
if (exception instanceof MqttException) {
MqttException ex = (MqttException)exception;
System.err.println("publish failed with the error code = " + ex.getReasonCode());
}
}
}
);
向用户别名发送消息, 用于实现点对点的消息发送。
public void publishToAlias(String alias, String message,IMqttActionListener mqttAction)
public void publishToAlias(String alias, String message, Map opts, IMqttActionListener mqttAction)
名称 | 类型 | 说明 |
---|---|---|
alias | String | 用户设置的别名信息,取值范围详见 参数说明 |
message | String | 向目标别名的订阅者发布的消息 |
opts | Map | 向目标别名的订阅者发布的消息的选项:如消息有效时间,目标平台等等 |
mqttAction | IMqttActionListener | 成功会回调 onSuccess, 失败回调 onFailure |
mqttAsyncClient.publishToAlias(topic, msg,
new IMqttActionListener() {
@Override
public void onSuccess(IMqttToken asyncActionToken) {
//....
}
@Override
public void onFailure(IMqttToken asyncActionToken, Throwable exception) {
if (exception instanceof MqttException) {
MqttException ex = (MqttException)exception;
System.err.println("publishToAlias failed with the error code = " + ex.getReasonCode());
}
}
}
);
App 可以调用此函数来上报客户端的行为,如打开通知栏次数,按钮点击次数,资源下载成功等等行为。
public void report(String actiton, String data)
名称 | 类型 | 说明 |
---|---|---|
action | String | 需要统计的行为,如打开通知栏,下载资源成功等等 |
data | String | 想对应 action 的附加数据,以满足统计相关的其他业务需求 |
mqttAsyncClient.report("notifaction_opened", null,);
App 可以调用此函数来绑定账号,用户名,每个用户只能指定一个别名。
public void setAlias(String alias, IMqttActionListener mqttAction)
名称 | 类型 | 说明 |
---|---|---|
alias | String | 用户设置的别名信息,取值范围详见 参数说明 |
mqttAction | IMqttActionListener | 成功会回调 onSuccess, 失败回调 onFailure |
mqttAsyncClient.setAlias(alias,
new IMqttActionListener() {
@Override
public void onSuccess(IMqttToken asyncActionToken) {
String alias = asyncActionToken.getAlias();
//...
}
@Override
public void onFailure(IMqttToken asyncActionToken, Throwable exception) {
if (exception instanceof MqttException) {
MqttException ex = (MqttException)exception;
System.err.println("setAlias failed with the error code = " + ex.getReasonCode());
}
}
}
);
App 可以调用此函数来获取当前用户的别名。
public void getAlias(IMqttActionListener mqttAction)
名称 | 类型 | 说明 |
---|---|---|
mqttAction | IMqttActionListener | 成功会回调 onSuccess, 失败回调 onFailure |
mqttAsyncClient.getAlias(new IMqttActionListener() {
@Override
public void onSuccess(IMqttToken mqttToken) {
String alias = mqttToken.getAlias();
//...
}
@Override
public void onFailure(IMqttToken asyncActionToken, Throwable exception) {
if (exception instanceof MqttException) {
MqttException ex = (MqttException)exception;
System.err.println("getAlias failed with the error code = " + ex.getReasonCode());
}
}
}
);
App 可以查询用户订阅的频道列表,如果不传入参数 alias, 则是获取当前用户的频道列表,如果输入参数 alias,则是获取目标 alias 的频道列表。
public void getTopicList(IMqttActionListener mqttAction)
public static void getTopicList(String alias, IMqttActionListener mqttAction)
名称 | 类型 | 说明 |
---|---|---|
alias | String | 用户设置的别名信息,取值范围详见 参数说明 |
mqttAction | IMqttActionListener | 成功会回调 onSuccess, 失败回调 onFailure |
mqttAsyncClient.getTopicList(new IMqttActionListener() {
@Override
public void onSuccess(IMqttToken mqttToken) {
JSONObject result = mqttToken.getResult();
try {
JSONArray topics = result.getJSONArray("topics");
System.out.println(topics.toString());
} catch (JSONException e) {
}
}
@Override
public void onFailure(IMqttToken asyncActionToken, Throwable exception) {
if (exception instanceof MqttException) {
MqttException ex = (MqttException)exception;
System.err.println("getTopicList failed with the error code = " + ex.getReasonCode());
}
}
}
);
App 可以调用此函数来获取订阅输入 Topic 下面所有的用户的别名。
public void getAliasList(String topic, IMqttActionListener mqttAction)
public void getAliasList(String topic, boolean disableState, boolean disableAlias, IMqttActionListener mqttAction)
名称 | 类型 | 说明 |
---|---|---|
topic | String | app 订阅的的频道,取值范围详见 参数说明 |
disableState | boolean | 结果是否排除别名状态信息 |
disableAlias | boolean | 结果是否排除别名列表 |
mqttAction | IMqttActionListener | 成功会回调 onSuccess, 失败回调 onFailure |
mqttAsyncClient.getAliasList("t1",
new IMqttActionListener() {
@Override
public void onSuccess(IMqttToken mqttToken) {
JSONObject result = mqttToken.getResult();
try {
JSONArray topics = result.getJSONArray("alias");
System.out.println(topics.toString());
} catch (JSONException e) {
}
}
@Override
public void onFailure(IMqttToken asyncActionToken, Throwable exception) {
if (exception instanceof MqttException) {
MqttException ex = (MqttException)exception;
System.err.println("getAliasList failed with the error code = " + ex.getReasonCode());
}
}
}
);
根据别名来获取用用户的状态,如是否在线等信息
public void getState(String alias, IMqttActionListener mqttAction)
名称 | 类型 | 说明 |
---|---|---|
alias | String | 用户设置的别名信息,取值范围详见 参数说明 |
mqttAction | IMqttActionListener | 成功会回调 onSuccess, 失败回调 onFailure |
mqttAsyncClient.getState("t1", new IMqttActionListener() {
@Override
public void onSuccess(IMqttToken mqttToken) {
JSONObject result = mqttToken.getResult();
try {
String status = result.getString("status");
System.out.println("status = " + status);
} catch (JSONException e) {
}
}
@Override
public void onFailure(IMqttToken asyncActionToken, Throwable exception) {
if (exception instanceof MqttException) {
MqttException ex = (MqttException)exception;
System.err.println("get state failed with the error code = " + ex.getReasonCode());
}
}
}
);