上个月我试图在我的应用程序中第一次使用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服务器配置良好并且连接良好,那么一切都应该可以正常工作。
我并不擅长解释事情,但是当你尝试时,如果出现问题,请告诉我! 分享是关键,所以让我们一起工作!!!!