配置代码
host、port、username、password改成你自己的配置;CocoaMQTT Delegate 代理部分需要使用对应版本的Delegate(要修改)
注:host为主机名,不是Url;若你的MQTT服务器的Broker为 tcp://xxx.xxx,host应为xxx.xxx而不是tcp://xxx.xxx
import CocoaMQTT
import Foundation
class MQTTManager: CocoaMQTTDelegate {
var mqtt: CocoaMQTT!
// 初始化
init() {
// 每台设备clientID需为全局唯一,否则会被挤下去
let clientID = "CocoaMQTT-" + String(ProcessInfo().processIdentifier)
// 初始化CocoaMQTT实例
mqtt = CocoaMQTT(clientID: clientID, host: "broker.emqx.io", port: 1883)
// 设置代理
mqtt.delegate = self
// 账号
mqtt.username = "test"
// 密码
mqtt.password = "public"
// 保持活动时间间隔
self.mqtt.keepAlive = 30
// 清除会话
self.mqtt.cleanSession = true
// App端遗嘱消息
mqtt.willMessage = CocoaMQTTMessage(topic: "/will", string: "dieout")
// 连接
connect()
}
// 连接
func connect() {
mqtt.connect()
}
// 断开连接
func disconnect() {
mqtt.disconnect()
}
// 重连
func reconnect() {
print("Attempting to reconnect...")
DispatchQueue.global().asyncAfter(deadline: .now() + 2) {
self.connect()
}
}
/* CocoaMQTT Delegate 代理(要修改) */
///
func mqtt(_ mqtt: CocoaMQTT, didConnectAck ack: CocoaMQTTConnAck) {
if ack == .accept {
print("Connected successfully!")
//订阅topic1
mqtt.subscribe("topic1", qos: CocoaMQTTQoS.qos0)
// 发布topic2,话题为message2
mqtt.publish("topic2", withString: message2)
}
}
///
func mqtt(_ mqtt: CocoaMQTT, didPublishMessage message: CocoaMQTTMessage, id: UInt16) {
// 是否成功发布
print("publish topic: \(message.topic)")
}
///
func mqtt(_ mqtt: CocoaMQTT, didPublishAck id: UInt16) {
}
///
func mqtt(_ mqtt: CocoaMQTT, didReceiveMessage message: CocoaMQTTMessage, id: UInt16 ) {
// 处理订阅到的消息
if message.topic == "topic1" {
// 详细的处理方法
}
}
///
func mqtt(_ mqtt: CocoaMQTT, didSubscribeTopics success: NSDictionary, failed: [String]) {
// 是否订阅成功
print("Subscribed: \(success)")
}
///
func mqtt(_ mqtt: CocoaMQTT, didUnsubscribeTopics topics: [String]) {
}
///
func mqttDidPing(_ mqtt: CocoaMQTT) {
}
///
func mqttDidReceivePong(_ mqtt: CocoaMQTT) {
}
///
func mqttDidDisconnect(_ mqtt: CocoaMQTT, withError err: Error?) {
}
/// Manually validate SSL/TLS server certificate.
///
/// This method will be called if enable `allowUntrustCACertificate`
@objc func mqtt(_ mqtt: CocoaMQTT, didReceive trust: SecTrust, completionHandler: @escaping (Bool) -> Void) {
}
@objc func mqttUrlSession(_ mqtt: CocoaMQTT, didReceiveTrust trust: SecTrust, didReceiveChallenge challenge: URLAuthenticationChallenge, completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) {
}
///
@objc func mqtt(_ mqtt: CocoaMQTT, didPublishComplete id: UInt16) {
}
///
@objc func mqtt(_ mqtt: CocoaMQTT, didStateChangeTo state: CocoaMQTTConnState) {
}
}
修改 CocoaMQTT Delegate 代理
修改上述配置代码中的 CocoaMQTT Delegate 代理
按住 command 键点击 CocoaMQTTDelegate 跳转到 CocoaMQTTDelegate 定义
配置里的CocoaMQTT Delegate 代理要与CocoaMQTTDelegate定义相对应
使用
let mqttManager = MQTTManager()
mqttManager.connect()