Use Core Bluetooth en lugar de iBeacon: ¿cualquier inconveniente?

Estoy trabajando en un proyecto donde primero quería anunciar un dispositivo como un iBeacon y hacer posible que se conecte a ese dispositivo a través de Core Bluetooth al mismo time. Además del hecho de que esto no es fácil de hacer (un dispositivo no puede publicitarse como un iBeacon y un dispositivo CB al mismo time), noté que la parte de iBeacon parece innecesaria; descubrir periféricos con Core Bluetooth parece básicamente lo mismo que descubrir iBeacons.

Mi primera pregunta: ¿estoy en lo correcto al asumir esto? ¿O no proporciona iBeacon algo que los periféricos centrales / periféricos en CB no? Especialmente en lo que se refiere a publicidad / búsqueda de background?


El único problema que puedo ver ahora es que el CLBeacon me da tanto un rssi como una accuracy (y de esto, se calcula la proximity aproximada). Con Core Bluetooth, centralManager:didDiscoverPeripheral:advertisementData:RSSI: solo me da un RSSI. ¿Hay alguna manera de recuperar la precisión aquí para poder calcular la proximidad? Esto es importante para mí y supongo que confiar en RSSI solo por la proximidad me dará resultados less precisos.

Mi segunda pregunta: ¿Puedo get la accuracy que obtengo con iBeacon en Core Bluetooth o una medida similar para calcular la proximidad?

Puede calcular su propia estimación de distancia con RSSI utilizando un algorithm como el que publiqué aquí:

https://stackoverflow.com/a/20434019/1461050

El truco es que necesitará tantas medidas de RSSI como sea posible promediado en un intervalo de time de 20 segundos aproximadamente para networkingucir el ruido en el cálculo.

Las principales ventajas de utilizar CoreLocation API de CoreLocation para detectar iBeacons estándar frente a CoreBluetooth para detectar balizas personalizadas son:

  1. Hay una variedad de hardware barato disponible para el estándar iBeacon.
  2. CoreLocation puede escanear iBeacons en segundo plano (es probable que use asistencia de hardware en iPhone 5+) de manera que pueda iniciar su aplicación automáticamente relativamente rápido, incluso si el usuario no lo inició manualmente desde el inicio. A partir del iOS 7.1, incluso si el usuario destruye la aplicación desde el conmutador de tareas, CoreLocation puede relanzarlo en segundo plano si se detecta un iBeacon. No creo que todo esto sea posible con CoreBluetooth .
  3. La transmisión iBeacon le permite leer fácilmente la combinación UUID / mayor / menor identificador en iOS sin synchronization. Estos 20 bytes de datos (con los campos principal y secundario capaces de establecerse en valores arbitrarios) es más de lo que puede get de un UUID de service de Bluetooth de 16 bytes.
  4. No es necesario que lance su propio software para la estimación de distancia.