3

다른 블루투스 저에너지 주변 장치에 여러 번 연결하고 연결을 끊는 응용 프로그램을 개발 중입니다. 인터넷에 대한 많은 연구 끝에 이미 발견 된 서비스와 특성을 저장하는 방법을 찾지 못했기 때문에 더 빨리 다시 연결할 수 있습니다. 현재 각 재 연결 후 필요한 서비스와 특성을 발견하고 있습니다. 비용은 1.5 초에서 2 초 사이입니다.CBPeripheral을 더 빨리 다시 연결하십시오.

누군가 CBService 또는 CBCharacteristic을 저장/캐시하는 경험이나 해결책이 있습니까? 아니면 누군가가 더 빨리 다시 연결하는 방법을 알고 있습니까? 내가 작동하지 않습니다 주변, 서비스 및 메모리 특성 객체와 수동 캐싱 캐싱을 시도했습니다 어떤 도움

+0

애플리케이션에 캐시하는 방법을 묻습니다. –

+1

그것은 서비스와 특성을 캐시하는 솔루션이지만, 이미 서비스 사본을 만들려고했습니다. 그러나 불행하게도 CBPeripheral, CBService 및 CBCharacteristic은 NSCopying을 채택하지 않았습니다. 그들을 저장할 수있는 또 다른 방법이 있습니까? –

+0

Pripheral을 배열에 넣을 수 있습니다. 이 배열은 사용자가 NSUserDefaults 클래스를 사용하여 기본값으로 저장할 수 있습니다. –

답변

6

에 대한

감사합니다. 주변 장치에서 연결을 끊으면 서비스 및 특성 개체는 더 이상 사용할 수 없습니다. 실제로, CBPeripheral조차도 당신의 아래에서 탈출 할 수 있습니다 - CoreBluetooth는 몇 분마다 장치 UDID가 변경되는 내부 동작을합니다 (CBPeripheral이 다른 iOS 장치 인 경우).

그러나 iOS 6 용 개발을 실행하는 경우 속도를 높일 수있는 방법이 있습니다. WWDC 2012에서 watch 고급 블루투스 토크를 사용하면 캐싱 서비스 및 특성에 대한 슬라이드가 보입니다. 본질적으로 OS는 모두 을 캐시 할 수 있지만 페어링 된 장치 만 캐시 할 수 있습니다. 페어링하려면 인증 오류가 충분하지 않은 쓰기 요청에 응답해야합니다. , 아이폰 OS 주변에 페어링 대화 상자가 팝업 된 후에는 쌍됩니다 가리 킵니다

- (void)peripheralManager:(CBPeripheralManager *)peripheralManager didReceiveWriteRequests:(NSArray *)requests { 
     ... 

     [peripheralManager respondToRequest:request withResult:CBATTErrorInsufficientAuthentication]; 

     ... 
} 

: 예를 들어, 아이폰 OS 주변을 위해 당신은 다음처럼 작성할 수 있습니다. 그 외에는 코드를 변경할 필요가 없습니다. 정상적으로 discoverServices 등을 호출하면보다 신속하게 (즉각적으로) 응답합니다.

10.8.3에서도이 동작을 테스트했지만 작동하지 않는 것으로 나타났습니다. 따라서 OS X에서 속도를 향상시키는 방법을 모르겠습니다 (주변 장치에 연결되어있는 것 외에는 다른 것).

+0

답변 해 주셔서 감사합니다. 나는 이미 버그 보고서를 작성했고 애플은 서비스와 특성을 캐싱하고 있다고 나에게 말했다. 그러나 필자는 주변 장치를 테스트하여 연결 간격이 느린 것을 보았습니다. 이 캐싱은 2 개의 iOS 기기 또는 타사 주변 기기에서만 사용할 수 있습니까? –

+1

암호화 된 링크를 설정하면 타사 주변 기기와 함께 작동해야합니다. 나 자신을 테스트하지 않았다. –

+0

은 암호화 된 연결이어야합니까? 지금은 암호화없이 내 주변 장치에 연결하기 때문에 –

3

iOS 7은 추가 캐싱 (iOS 7: What's New in Bluetooth LE)을 추가합니다. 주변 장치에 다시 연결하고, 서비스를 검색하고, 특성을 발견하고, 단일 특성 값을 읽는 데 소요되는 시간이 100ms 미만 (평균 ~ 80ms)입니다.

내 테스트 구성이 iPad 3에 연결된 iPad Air였습니다.

+0

대림 (Darrinm), 캐싱 설명이 기사에서 정확히 어디에 위치 할 수 있습니까? 나는 속일 수있다, 나는 단지 그것을 발견하는 것처럼 보일 수 없다. – Max

+0

@Max 설명이별로 없으며 "주변 데이터 캐싱 [...]은 각 특성의 마지막으로 알려진 값을 포함하여 각 특성 및 서비스의 더 많은 데이터로 향상됩니다." 따라서 전체 연결 시간/서비스 발견/특성 발견/값 읽기 프로세스의 시간을 조정하여 새 캐싱이 얼마나 개선되었는지 확인하십시오. – darrinm

관련 문제