在Swift 3中使用Moscapsule的Mqtt客户端

上个月,我试图在我的一个应用程序中第一次使用Mqtt。 作为一个初学者,我很难find如何以及在哪里放样本代码,我发现在各种来源。

在我的问题上花了一个星期后,我设法让mqtt在我的项目中工作,所以我在这里分享我所学到的步骤。 这不是一个真正的问题(xD!)

首先,请给予Moscapsule的开发者信用。 你可以在他们的github页面上find更多的信息和细节。

好的,让我们开始展示吧。

如何在iOS上使用Moscapsule实现mqtt客户端(Swift)?

1)使用吊舱安装Moscapsule( 再次检查这里 )。

2)在你的viewcontroller文件(或任何你使用xxxx.swift的名字):

a) import Moscapusle

b)在viewDidLoad()方法之前,configuration并创buildmqtt客户端(使其成为全局variables)。

 //set MQTT client configuration let mqttConfig = MQTTConfig(clientId: "iOS_test_mqtt", host: "yourserver.adress.com", port: 1883, keepAlive: 60) // create new MQTT Connection var mqttClient: MQTTClient? = nil 

3)在viewDidLoad()或其他你需要的方法中,请实现onPublish方法和onMessageCallback方法。

 mqttConfig.onPublishCallback = { messageId in print("published (msg id=\(messageId)))") } mqttConfig.onMessageCallback = { mqttMessage in print("MQTT Message received: payload=\(mqttMessage.payloadString)") let receivedMessage = mqttMessage.payloadString! print("from server msg = \(receivedMessage)") let data = receivedMessage.data(using: .utf8, allowLossyConversion: false)! print("xxxxxxx = \(data)") } 

4)获取,读取和操作mqttConfig.onMessageCallback = {}中收到的消息。 这里是一个关于如何通过mqtt请求从我的mqtt服务器接收qrCode密钥(在json内)的示例

 mqttConfig.onMessageCallback = { mqttMessage in print("MQTT Message received: payload=\(mqttMessage.payloadString)") let receivedMessage = mqttMessage.payloadString! print("from server msg = \(receivedMessage)") let data = receivedMessage.data(using: .utf8, allowLossyConversion: false)! print("xxxxxxx = \(data)") do{ let json = try JSONSerialization.jsonObject(with: data, options: .mutableContainers) as! [String : AnyObject] /* * catch and analyse the contents of the received messages from the differents request */ // message received from the qrCode creation request if let randomKey = json["jsonanswer"]?.value(forKey: "randomkey"){ print("the random key is = \(randomKey)") } 

5)不要忘记build立你创build的客户端的mqtt连接。 使用这个代码示例

 mqttClient = MQTT.newConnection(mqttConfig, connectImmediately: true) 

6)你也需要订阅你想听的话题。 使用这个代码示例

 mqttClient?.subscribe("opencampus/getqr/\(myUserUniqueID)", qos: 0) 

7)如果您想要在执行某个操作时向某个主题发布某个消息(例如:用户单击了一个button),请将以下代码放入您的btnPressd函数中。 参考这个代码示例

  @IBAction func btnGenerateQRCodePressed(_ sender: UIButton) { // publish the user unique ID when user click the button print("###### unique id = \(myUserUniqueID)") mqttClient?.publish(string: "{\"uniqueid\": \"\(myUserUniqueID)\"}", topic: "opencampus/generateqr", qos: 0, retain: false) } 

8)最后要做的事情是,当你完成使用它时,断开你的mqtt客户端。

 self.mqttClient?.disconnect() 

瞧!!!! 如果你的mqtt服务器configuration和连接的好,一切都应该适合你。

我不是很擅长解释事情,但是让我知道如果你尝试的时候发生了错误! 共享是关键,所以让我们一起工作!