Notice
Recent Posts
Recent Comments
Link
투케이2K
291. (TWOK/ERROR) [Ios] Ios 블루투스 스캔 시 안드로이드 블루투스 Service UUID 설정 값 스캔 하지 못하는 이슈 본문
투케이2K 에러관리
291. (TWOK/ERROR) [Ios] Ios 블루투스 스캔 시 안드로이드 블루투스 Service UUID 설정 값 스캔 하지 못하는 이슈
투케이2K 2025. 1. 2. 18:47[환경 설정 및 설명]
프로그램 : Xcode
설 명 : [Ios] Ios 블루투스 스캔 시 안드로이드 블루투스 Service UUID 설정 값 스캔 하지 못하는 이슈
[설 명]
--------------------------------------------------------------------------
[에러 원인]
--------------------------------------------------------------------------
1. Ios 블루투스 스캔 시 안드로이드 블루투스 Service UUID 설정 값 스캔 하지 못하는 이슈
2. Android , Ios 간에는 UUID 형식이 다르게 표현 될 수 있어 특정 UUID 기준으로 기기 스캔 결과 확인 시 문제가 발생하는 이슈
--------------------------------------------------------------------------
--------------------------------------------------------------------------
[해결 방법]
--------------------------------------------------------------------------
1. Ios 기기에서 특정 Android 블루투스 기기 스캔 수행 시 UUID 값이 아닌 특정 Name 이름 찾기로 코드 변경
2. Android 블루투스 Name 이름 표시 확인 및 변경 방법 :
>> 안드로이드 시스템 설정 >> 블루투스 >> 장치 이름 확인
>> 안드로이드 프로그래밍 방식에서 Advertising 광고 활성 시 BluetoothAdapter 에 설정 된 Name 이름
3. IOS 블루투스 스캔 결과 확인 부분 소스 코드 첨부 :
let SEARCH_BLUETOOTH_NAME = "TWOK-BLUETOOTH" // MARK: [찾으려는 블루투스 이름] : 연결할 Gatt 서버 이름
// -------------------------------------------------
// MARK: - [블루투스 장치를 찾았을 때 실행되는 이벤트] : CBCentralManagerDelegate : didDiscover
// -------------------------------------------------
func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber){
if peripheral.name == self.SEARCH_BLUETOOTH_NAME {
print("🔵 :: didDiscover :: 실시간 블루투스 스캔 정보 >> NAME - \(String(peripheral.name ?? "")) / UUID - \(String(peripheral.identifier.uuidString)) / RSSI - \(String(RSSI.intValue))")
}
else {
print("🔴 :: didDiscover :: 실시간 블루투스 스캔 정보 >> NAME - \(String(peripheral.name ?? "")) / UUID - \(String(peripheral.identifier.uuidString)) / RSSI - \(String(RSSI.intValue))")
}
// -------------------------------------------------
// MARK: [스캔 리턴 리스트에 저장할 포맷 지정]
// -------------------------------------------------
var bleScanDic : Dictionary<String, String> = [String : String]()
bleScanDic["NAME"] = "\(String(peripheral.name ?? ""))"
bleScanDic["UUID"] = "\(String(peripheral.identifier.uuidString))"
//bleScanDic["RSSI"] = "\(String(RSSI.intValue))"
// -------------------------------------------------
// MARK: [블루투스 GATT 연결할 서버 이름을 찾은 경우 >> 연결 수행 실시]
// -------------------------------------------------
if self.scanBluetoothList != nil
&& self.scanBluetoothList.contains(bleScanDic) == false
&& peripheral.name == self.SEARCH_BLUETOOTH_NAME
&& self.scanBluetoothList.count < 1 { // MARK: [배열에 하나만 저장 수행]
// MARK: [배열에 추가]
self.scanBluetoothList.append(bleScanDic)
// MARK: [서버 연결에 필요한 peripheral 삽입]
peripheral.delegate = self // [딜리게이트 지정]
C_Bluetooth_Gatt_Client_Module.discoveredPeripheral = peripheral // [static 객체에 추가]
// MARK: [연결 nil 옵션 지정]
C_Bluetooth_Gatt_Client_Module.scanBluetoothCentralManager?.connect(peripheral, options: nil)
// MARK: [연결 기본 옵션 지정]
//C_Bluetooth_Gatt_Client_Module.scanBluetoothCentralManager?.connect(peripheral)
// MARK: [로그 출력]
S_Log._W_(description: "\(C_Bluetooth_Gatt_Client_Module.ACTIVITY_NAME) :: didDiscover :: 블루투스 연결 정보 확인 및 연결 수행", data: [
"NAME :: \(C_Bluetooth_Gatt_Client_Module.discoveredPeripheral?.name ?? "")",
"UUID :: \(C_Bluetooth_Gatt_Client_Module.discoveredPeripheral?.identifier.uuidString ?? "")"
])
}
}
--------------------------------------------------------------------------
--------------------------------------------------------------------------
[참고 사이트]
--------------------------------------------------------------------------
https://support.apple.com/ko-kr/guide/security/sec82597d97e/web
https://blog.naver.com/kkh0977/223687745202
https://blog.naver.com/kkh0977/223690092317
https://stackoverflow.com/questions/75197315/ble-ios-failed-to-encrypt-the-connection-the-connection-has-timed-out-unexpec
--------------------------------------------------------------------------
반응형
'투케이2K 에러관리' 카테고리의 다른 글
Comments