Mqtt客户端在Swift 3中使用Moscapsule

时间:2016-12-09 17:33:02

标签: ios swift3 mqtt

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

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

首先,让我们向Moscapsule的开发者提供信用。 您可以在他们的github页面上找到更多信息和详细信息。

好的,让我们开始演出。

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

1)使用pod安装Moscapsule(check here again)。

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

a)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

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)不要忘记建立您创建的客户端的mqtt连接。使用此代码示例

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

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

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

7)如果要在执行操作时向主题发布内容(消息)(例如:用户单击按钮),请将以下代码放入btnPressd func中。请参阅此代码示例

 @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服务器配置良好并且连接良好,那么一切都应该可以正常工作。

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

0 个答案:

没有答案