본문 바로가기

iOS/CoreBluetooth

iOS CoreBluetooth - CBPeripheralManager로 advertising하기 정리

iOS는 안드로이드 만큼이나 개발이 자유롭지 않습니다.


그래서 최대한 정해진 형식에 맞춰야지만 리젝도 안당합니다.




저는 최근에 아니 지금도 아이폰을 비콘으로 사용하는 기능을 필요로 하고 그 기능에 대해 알아보고, 삽질한 것들에 대한


내용들을 이 게시물에 계속 적고 또 알게된 것은 추가하고 틀린 것은 수정하려합니다.




(iOS개발 너무 스트레스..)


제 개발 환경은 iOS 10.1에 Swift 3, Xcode 8 입니다. (참고)




아이폰을 Peripheral로 활용하여 블루투스 신호를 발생시키기



앱에서 CoreBluetooth을 통해서 아이폰을 Peripheral로 활용해서 신호를 발생시 수 있다.



Advertising Data 구성하기



1. CLBeaconRegion을 이용하여 구성


CoreLocation의 CLBeaconRegion이란 클래스에서 UUID, major, minor, identifier 설정 후


peripheralData(withMeasuredPower: NSNumber?)이란 함수를 통해 Advertising Data 형식으로 만들어서 


startAdvertising을 시작할 때 같이 담아서 구성



CLBeaconRegion을 이용하면 Major, Minor을 정 할 수 있음

(다른 것도 확인 중)



2. Dictionary로 직접 구성하기


Advertising Data을 [CBAdvertisementDataLocalNameKey:"TestName"] 이런 식으로 직접 구성해서


startAdvertising에 담아서 구성



직접 Key를 추가하는 경우는 CBAdvertisementDataLocalNameKey와 CBAdvertisementDataServiceUUIDsKey만 추가 가능

나머진 불가능



공식 문서에도 나와있음


An optional dictionary containing the data you want to advertise. The possible keys of an advertisementData dictionary are detailed in CBCentralManagerDelegate. That said, only two of the keys are supported for peripheral manager objects: CBAdvertisementDataLocalNameKey and CBAdvertisementDataServiceUUIDsKey.


구글번역

광고 할 데이터가 포함 된 Dictionary (선택 사항). advertisingData 사전의 가능한 키는 CBCentralManagerDelegate에 자세히 설명되어 있습니다. 즉, CBAdvertisementDataLocalNameKey 및 CBAdvertisementDataServiceUUIDsKey라는 두 가지 키만 주변 장치 관리자 개체에 지원됩니다.



만약 여기 있는 키 말고도 CBAdvertisementDataOverflowServiceUUIDsKey나 manufacturerData를 설정하는 Key를 쓴다면


로그로 WARNING: The advertisement key 'Overflow Service UUIDs' is not allowed 이란 로그와 함께 그 부분은 실행이 되지 않음



하지만 1 방법으로 구성한 advertising data dictionary에는 


CBAdvertisementDataLocalNameKey와 CBAdvertisementDataServiceUUIDsKey는 추가 가능


(너무 당연한건가)