权限认证:每个请求都要包含appid、type、sign、id、time,其中appid在个人中心获取,type是请求类型,sign是签名校验,id是服务项目id,time是10位时间戳,sign生成规则是md5(appid+type+id+time+appsecret),其中appsecret在个人中心获取,时间戳有效期是5分钟,需要获取当前时间,请求支持GET、POST,下面例子:
增加MQTT: https://api.saav.cn/api/mqtt?appid=121212&type=add&sign=111&id=2024&remark=test&username=test&password=test&clientid=test123&time=111
返回: { "msg": "操作成功", "mqttid": 26, "uid": "1", "password": "aeb6d090438ac53acbed8e5413640827", "code": 200, "clientid": "LOGIN1@test", "deadtime": "2021-11-29 02:45:18", "remark": "test", "id": "2024", "username": "test" },
编辑MQTT: https://api.saav.cn/api/mqtt?appid=121212&type=edit&sign=111&id=2024&mqttid=25&remark=test2&time=111&password=test
参数说明:remark是必传,password如果需要修改密码就传,如果不需要可留空
返回: { "msg": "操作成功", "code": 200 }
删除MQTT: https://api.saav.cn/api/mqtt?appid=121212&type=del&sign=111&id=2024&mqttid=25&time=111
返回:
{ "msg": "操作成功", "code": 200 }
添加依赖:
<dependency>
<groupId>org.eclipse.paho</groupId>
<artifactId>org.eclipse.paho.client.mqttv3</artifactId>
<version>1.2.5</version>
</dependency>
代码:
import org.eclipse.paho.client.mqttv3.*;
public class MqttClientExample {
private static final String BROKER_URL = "tcp://192.168.0.188:1883"; // MQTT 服务器地址
private static final String CLIENT_ID = "testClient123"; // 客户端 ID(不能重复)
private static final String USERNAME = "mqtt_user";
private static final String PASSWORD = "123456";
private static final String TOPIC = "test/topic";
public static void main(String[] args) {
try {
// 创建 MQTT 客户端
MqttClient client = new MqttClient(BROKER_URL, CLIENT_ID, new MemoryPersistence());
// 配置 MQTT 连接参数
MqttConnectOptions options = new MqttConnectOptions();
options.setCleanSession(true); // 设置清除会话
options.setUserName(USERNAME);
options.setPassword(PASSWORD.toCharArray());
options.setKeepAliveInterval(60); // 心跳包间隔(秒)
options.setAutomaticReconnect(true); // 自动重连
// 连接 MQTT 服务器
client.connect(options);
System.out.println("✅ 已连接到 MQTT 服务器: " + BROKER_URL);
// 订阅主题
client.subscribe(TOPIC, (topic, message) -> {
System.out.println(" 收到消息: " + new String(message.getPayload()));
});
// 发送一条测试消息
MqttMessage message = new MqttMessage("Hello MQTT!".getBytes());
message.setQos(1); // QoS 级别:0, 1, 2
client.publish(TOPIC, message);
System.out.println(" 已发送消息: " + new String(message.getPayload()));
} catch (MqttException e) {
e.printStackTrace();
}
}
}
安装环境:
brew install eclipse-paho-mqtt-c eclipse-paho-mqtt-cpp
创建:MqttClient.mm
#import "MqttClient.h"
#import <iostream>
#include <mqtt/client.h>
using namespace std;
@interface MqttClient ()
@property (nonatomic, strong) NSString *broker;
@property (nonatomic, strong) NSString *clientId;
@property (nonatomic, strong) NSString *username;
@property (nonatomic, strong) NSString *password;
@end
@implementation MqttClient {
mqtt::client *client;
}
- (instancetype)initWithBroker:(NSString *)broker clientId:(NSString *)clientId {
if (self = [super init]) {
self.broker = broker;
self.clientId = clientId;
// 创建 MQTT 客户端
client = new mqtt::client([broker UTF8String], [clientId UTF8String]);
// 设置回调
client->set_callback(mqtt::callback([&](mqtt::const_message_ptr msg) {
NSLog(@" 收到 MQTT 消息: %s", msg->get_payload_str().c_str());
}));
}
return self;
}
// 连接 MQTT 服务器
- (void)connectWithUsername:(NSString *)username password:(NSString *)password {
self.username = username;
self.password = password;
try {
mqtt::connect_options connOpts;
connOpts.set_user_name([username UTF8String]);
connOpts.set_password([password UTF8String]);
connOpts.set_clean_session(true);
client->connect(connOpts);
NSLog(@"✅ 连接 MQTT 服务器成功");
} catch (const mqtt::exception &e) {
NSLog(@"❌ 连接失败: %s", e.what());
}
}
// 订阅主题
- (void)subscribeToTopic:(NSString *)topic {
try {
client->subscribe([topic UTF8String], 1);
NSLog(@"✅ 订阅 MQTT 主题: %@", topic);
} catch (const mqtt::exception &e) {
NSLog(@"❌ 订阅失败: %s", e.what());
}
}
// 发布消息
- (void)publishMessage:(NSString *)message toTopic:(NSString *)topic {
try {
mqtt::message_ptr pubmsg = mqtt::make_message([topic UTF8String], [message UTF8String]);
pubmsg->set_qos(1);
client->publish(pubmsg);
NSLog(@" 发送 MQTT 消息: %@", message);
} catch (const mqtt::exception &e) {
NSLog(@"❌ 发送失败: %s", e.what());
}
}
// 断开连接
- (void)disconnect {
try {
client->disconnect();
NSLog(@" 断开 MQTT 连接");
} catch (const mqtt::exception &e) {
NSLog(@"❌ 断开失败: %s", e.what());
}
}
- (void)dealloc {
delete client;
}
@end
调用方法:
#import "MqttClient.h"
MqttClient *mqtt = [[MqttClient alloc] initWithBroker:@"tcp://192.168.0.188:1883"
clientId:@"iOS_Client"];
[mqtt connectWithUsername:@"mqtt_user" password:@"123456"];
[mqtt subscribeToTopic:@"test/topic"];
[mqtt publishMessage:@"Hello from iOS" toTopic:@"test/topic"];