안녕하세요. iOSangBong 입니다.
오늘은 간단하게 MQTT를 연결해보겠습니다.
기존에는 Objc로 되어있는 MqttClient를 사용을 하고 있었지만
Swift로된 MQTT로 변경을 하는 과정에서 정리를 해놓겠습니다!
제가 사용한 라이브러리는 CocoaMQTT 입니다.
https://github.com/emqx/CocoaMQTT
이 놈을 잘사용해봅시다.
1. CocoaMQTT 연결하기
첫번째로 우선 라이브러리를 가져와봅시다.
위의 사이트에 들어가면 CocoaPods나 Carthage 방식이 설명이 되어 있는데
저는 SPM을 사용해볼겁니다!
검색을 해보니 있어서 바로 Add Package 해주고
CocoaMQTT를 사용하는 클래스로 이동해서 import 해줍니다.
2. MQTT 초기 세팅
그 다음으로는 mqtt를 선언해줍니다.
그리고 초기세팅을 해주면 됩니다.
mqtt와 연결할 cliendId와 host, port를 연결해주고
username 및 password를 입력해줍니다.
유저네임하고 비밀번호는 옵션입니다.
그리고 여기서 중요한 점.
autoReconnect를 true로 해줍니다.
그래야 네트워크가 끊겼을 경우나 연결에 실패했을 때 다시 재연결을 해줍니다.
그리고 delegate를 설정해준 다음
연결을 해주면 되겠죠?
3. Delegate 설정
그다음 Delegate를 설정해 줍시다.
CocoaMQTTDelegate를 들어가보니
필수항목 9개
선택항목이 4가지가 있네요.
정리를 해보자면...
일단 몇가지 항목은 확인을 해볼수가 없어서 빠졌습니다..
didConnectAck | MQTT 연결 진행 상태를 알려줍니다. MQTT가 연결이 된 후 ack가 접속 허용(.accept)되었을 때 Topic을 구독한다. |
didPublishMessage | 클라이언트가 브로커에 메시지를 보낼 때 ID를 생성(양방향일때 사용) |
didPublishAck | 클라이언트가 브로커에 메시지를 보낼 때(양방향일때 사용) |
didReceiveMessage | MQTT 메시지를 받아와서 처리하는 부분. 브로커가 클라이언트에 메시지를 보낼 때 ID를 생성 |
didSubscribeTopics | Topic 구독 성공 여부 |
didUnsubscribeTopics | Topic 구독 해제 |
mqttDidPing | 연결이 되어 있다면 일정 시간 마다 1분마다 mqttDidPing 호출됌 |
mqttDidReceivePong | 연결이 되어 있다면 일정 시간 마다 1분마다 mqttDidReceivePong 호출됌 - mqttDidPing이 호출된다음(핑퐁) |
mqttDidDisconnect | MQTT connect시 실패 + disconnect시 |
didStateChangeTo | MQTT 연결진행 중 상태가 변경되었을 경우 |
didReceive | SSL/TLS 서버 인증서를 수동으로 검증 이 메서드는 `allowUntrustCACertificate`를 활성화하면 호출됩니다. |
Delegate 함수들은 이렇게 정리를 할 수 있습니다.
didConnectAck에서 접속허용일때 Topic을 구독하고
didReceiveMessage에서 받은 메시지를 처리하고
mqttDidDisconnect에서 연결해제만 잘 처리하면 될것 같습니다.
프로젝트의 요구사항에 따라 알맞게 설정을 하면 될듯합니다!
연결이 잘되었다면 1분마다 핑퐁하는걸 볼 수 있습니다.
이걸 프로젝트에 잘 활용하셨으면 좋겠네요.
다들 즐코딩하세요. 그럼이만~
'Swift' 카테고리의 다른 글
[iOS][Swift] LocalAuthentication Face ID & Touch ID 생체인식 간단하게 알아보기 (0) | 2024.08.03 |
---|---|
[iOS][Swift] shake motion 알아보기 (0) | 2023.08.22 |
[iOS][Swift] 'keyWindow' was deprecated 간단하게 해결하기 (0) | 2023.08.11 |
[iOS][Swift] NWPathMonitor 네트워크 간단하게 감지하기 (0) | 2023.07.26 |
[iOS][Swift] QR Code 간단하게 만들기 (0) | 2023.07.12 |