Mqtt客户端在Swift 3中使用Moscapsule

Ede*_*der 5 ios mqtt swift3

上个月我试图在我的应用程序中第一次使用Mqtt.作为一个初学者,我很难找到如何以及在何处放置我在各种来源中找到的样本代码.

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

首先,让我们给Moscapsule的开发人员.您可以在他们的github页面上找到更多信息和详细信息.

好的,让我们开始这个节目吧.

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

1)使用pod安装Moscapsule(再次查看).

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

一个) import Moscapusle

b)在viewDidLoad()方法之前,配置并创建mqtt客户端(使其成为全局变量).

//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
Run Code Online (Sandbox Code Playgroud)

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)")
            }
Run Code Online (Sandbox Code Playgroud)

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)")
              }
Run Code Online (Sandbox Code Playgroud)

5)不要忘记建立您创建的客户端的mqtt连接.使用此代码示例

mqttClient = MQTT.newConnection(mqttConfig, connectImmediately: true)
Run Code Online (Sandbox Code Playgroud)

6)您还需要订阅您想要收听的主题.使用此代码示例

mqttClient?.subscribe("opencampus/getqr/\(myUserUniqueID)", qos: 0)
Run Code Online (Sandbox Code Playgroud)

7)如果要在执行操作时向主题发布某些内容(消息)(例如:用户单击按钮),请将以下代码放入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)


    }
Run Code Online (Sandbox Code Playgroud)

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

self.mqttClient?.disconnect()
Run Code Online (Sandbox Code Playgroud)

瞧!!!! 如果您的mqtt服务器配置良好并且连接良好,那么一切都应该可以正常工作.

我并不擅长解释事情,但是当你尝试时,如果出现问题,请告诉我!分享是关键,所以让我们共同努力!!!!