* 원문 : http://code.tutsplus.com/tutorials/ios-7-sdk-core-bluetooth-theoretical-overview--mobile-20728
대충 내맘대로 필요한 부분만 번역함
* Central
스캔, 연결, 연결종료를 담당함.
각 Peripheral 의 정보를 사용하여 로직을 담당한다.
ios에서는 CBCentralManager 에 해당함.
* Peripheral
공유할 정보를 가지고 있는 장치 (심박수, 온도 등)
무선으로 정보를 내보낸다.
ios에서는 CBPeripheral 에 해당함.
* CBCentralManager 는 발견되장치, 연결된 장치(Peripheral)를 관리한다.
peripheral안에 저장된 데이타는 service들과 characteristic들을 기반으로 계층적으로 이루어져있다.
* service : 공지알림, 혈압, 심박수등에 해당한다. (peripheral이 제공하는 서비스 인듯...)
ios에서 CBService 에 해당함.
* characteristic : service의 값이다. (각 서비스의 실제 값인듯...)
ios에서 CBCharacteristic 에 해당함.
* 시뮬레이터에서는 CoreBluetooth 를 지원하지 않는다. 실제 기기에서 테스트해라.
* iPhone4S부터 Bluetooth4.0 을 지원한다.
* 다른 iOS 기기 또는 맥을 peripheral로 사용할수 있다.
이때는 서로 데이타를 주고 받을수도 있다.
* 시스템의 자원이 제한적이기때문에,
모든 앱은 background상태와 foreground상태에서 다른 동작을 한다.
기본적으로 CB작업(central, peripheral 둘다)은 background, suspended 상태일때 중지된다.
하지만 CB작업이 background에서 실행되도록 선언할수 있다.
비록 CB background실행모드일지라도, 해당시점에 ios가 현재실행중인 앱을 위해
메모리를 늘리려고, background에 있는 너의 앱을 죽일수 있고, 그러면 너의 앱은 절대 실행되지 않을것이다.
CB는 central과 peripheral의 상태정보를 저장했다가, 다시 실행될때 복구될수 있다.
* 너의 앱이 background모드를 지원하지 않으면, 앱이 중지된상태일때 발생한
bluetooth 이벤트들은 시스템이 차곡차곡 쌓다가, 너의 앱이 살아날때 다시 발생시켜준다.
다시 발생시켜주는 3가지 옵션이 있다.
CBCentralMananger 의 connectPeripheral:options: 메소드를 호출할때 옵션을 주면 된다.
- CBConnectPeripheralOptionNotifyOnConnectionKey
너의 앱이 중지상태일때 연결성공한 알림을 받기 원할때
- CBConnectPeripheralOptionNotifyOnDisconnectionKey
너의 앱이 중지상태일때 연결해제 성공한 알림을 받기 원할때
- CBConnectPeripheralOptionNotifyOnNotificationKey
너의 앱이 중지상태일때 발생한 모든 알림을 받기 원할때
* Device scanning
꼭 필요한 경우에만 스캔해라. 무선사용이 ios기기의 배터리를 많이 잡아먹는다.
* Multiple advertisements from the same device
원곡의 peripheral 장치는 초당 여러번의 광고패킷을 보낼수도 있다 (알림패킷)
scanForPeripheralsWithServices:options: 매소드는 같은 장치에서 오는
모든 광고를 한번만 받게 처리한다.
하지만 CBCentralManagerScanOptionAllowDuplicatesKey 옵션을 사용하면
같은 장치에서 오는 복수의 광고를 받을수도 있다.
* Extract the peripheral's data wisely
peripheral 장치는 많은 service와 characteristic를 가질수 있다.
너의 앱이 필요로 하는 service와 characteristic만 discover 하는게 좋을거다
* Subscribe or check the characteristics values
You can retrieve characteristics by using user input or doing so automatically when that characteristic changes.
You should use one method accordingly.
* Every time you know that a connection is not needed you should terminate it
Due to caching mechanisms you can quickly re-connect.
Apple has a specific work flow when a central tries to reconnect to a device
'iOS 초보' 카테고리의 다른 글
화면 회전 정리 (0) | 2015.08.07 |
---|---|
CoreText (0) | 2015.06.17 |
2.23리젝 대응 (0) | 2015.05.12 |
pdf, horizonal, paging (0) | 2015.05.08 |
perform block with delay (0) | 2015.04.28 |