self.manager = [[MQTTSessionManager alloc] init];
? ? ? ? self.manager.delegate = self;
? ? ? ? self.manager.subscriptions = [NSDictionary dictionaryWithObject:[NSNumber numberWithInt:MQTTQosLevelExactlyOnce] forKey:[NSString stringWithFormat:@"%@/#", self.base]];
? ? ? ? [sessionManager connectTo:@“192.168.1.4” //服務(wù)器地址
? ? ? ? ? ? ? ? ? ? ? ? ? ? port:1883 //服務(wù)端端口號(hào)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? tls:false //是否使用tls協(xié)議,mosca是支持tls的,如果使用了要設(shè)置成true
? ? ? ? ? ? ? ? ? ? ? ? keepalive:60 //心跳時(shí)間,單位秒,每隔固定時(shí)間發(fā)送心跳包
? ? ? ? ? ? ? ? ? ? ? ? ? ? clean:false //session是否清除,這個(gè)需要注意,如果是false,代表保持登錄,如果客戶端離線了再次登錄就可以接收到離線消息。注意:QoS為1和QoS為2,并需訂閱和發(fā)送一致
? ? ? ? ? ? ? ? ? ? ? ? ? ? auth:true //是否使用登錄驗(yàn)證,和下面的user和pass參數(shù)組合使用
? ? ? ? ? ? ? ? ? ? ? ? ? ? user:_userName //用戶名
? ? ? ? ? ? ? ? ? ? ? ? ? ? pass:_passwd //密碼
? ? ? ? ? ? ? ? ? ? ? ? willTopic:@"" //下面四個(gè)參數(shù)用來(lái)設(shè)置如果客戶端異常離線發(fā)送的消息,當(dāng)前參數(shù)是哪個(gè)topic用來(lái)傳輸異常離線消息,這里的異常離線消息都指的是客戶端掉線后發(fā)送的掉線消息
? ? ? ? ? ? ? ? ? ? ? ? ? ? will:@"" //異常離線消息體。自定義的異常離線消息,約定好格式就可以了
? ? ? ? ? ? ? ? ? ? ? ? ? willQos:0 //接收離線消息的級(jí)別 0、1、2
? ? ? ? ? ? ? ? ? willRetainFlag:false //只有在為true時(shí),Will Qos和Will Retain才會(huì)被讀取,此時(shí)消息體payload中要出現(xiàn)Will Topic和Will Message具體內(nèi)容,否則,Will QoS和Will Retain值會(huì)被忽略掉
? ? ? ? ? ? ? ? ? ? withClientId:nil]; //客戶端id,需要特別指出的是這個(gè)id需要全局唯一,因?yàn)榉?wù)端是根據(jù)這個(gè)來(lái)區(qū)分不同的客戶端的,默認(rèn)情況下一個(gè)id登錄后,假如有另外的連接以這個(gè)id登錄,上一個(gè)連接會(huì)被踢下線
//訂閱和發(fā)送消息
//訂閱主題。NSDictionary類型,Object 為 QoS,key 為 Topic
self.manager.subscriptions = [NSDictionary dictionaryWithObject:[NSNumber numberWithInt:MQTTQosLevelExactlyOnce] forKey:_topic];
//發(fā)送消息,返回值msgid大于0代表發(fā)送成功。(注意:這里說(shuō)“發(fā)送成功”并不是指“成功發(fā)送給服務(wù)器”(無(wú)網(wǎng)絡(luò)情況下也可能會(huì)返回大于0))
//msgid:PUBLISH消息的消息標(biāo)識(shí)符。 如果qos為0,則為零。如果qos為1或2,則在消息丟棄時(shí)為零
UInt16 msgid = [sessionManager sendData:[msg dataUsingEncoding:NSUTF8StringEncoding] //要發(fā)送的消息體
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? topic:_topic //要往哪個(gè)topic發(fā)送消息
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? qos:MQTTQosLevelExactlyOnce //消息級(jí)別
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? retain:false];