La tecnología Bluetooth se ha convertido en un nombre familiar. Eso es lo importante que se ha vuelto. Bluetooth nos permite compartir datos, archivos de audio, videos y grandes cantidades de información entre dispositivos emparejados. Está integrado en la mayoría de los dispositivos, teléfonos, computadoras, automóviles, dispositivos portátiles y casi todo lo relacionado con la tecnología. Apple ha aprovechado Bluetooth para ofrecer funciones como Handsoff y AirDrop que mejoran la experiencia del usuario con sus productos Apple. Apple también aprovecha Bluetooth con iOS para permitir que Apple Watch y AirPods se comuniquen con su teléfono y abran más oportunidades.
Dado que las tendencias de desarrollo móvil siguen siendo fuertes, es importante que los desarrolladores de software tengan un conocimiento claro sobre qué es la tecnología Bluetooth y cómo está arraigada en las tecnologías móviles. Antes de comenzar desde cero con una aplicación Bluetooth, se debe comprender lo que sucede cuando se envía una aplicación Bluetooth en escenarios de primer plano y de fondo. También, debe de comprender cómo hacer que funcione y cuáles son sus posibilidades y limitaciones. Continúe leyendo para ver nuestros consejos para la programación Bluetooth de iOS con ejemplos.
Bluetooth
Bluetooth es una tecnología inalámbrica estándar para intercambiar datos a distancias cortas desde dispositivos fijos y móviles, y construir redes de área personal. Bluetooth es administrado por el Grupo de Interés Especial de Bluetooth (SIG) y es actualizado y mejorado regularmente por los Grupos de Trabajo de SIG de Bluetooth.
Hay tres implementaciones principales de la tecnología Bluetooth:
-
Bluetooth Basic Rate / Enhanced Data Rate (BR / EDR): Establece una conexión inalámbrica continua de rango relativamente corto, lo que la hace ideal para su uso en casos, como la transmisión de audio.
-
Bluetooth con baja energía (LE): Permite ráfagas cortas de conexión de radio de largo alcance, lo que lo hace ideal para aplicaciones de Internet de las cosas (IoT) que no requieren una conexión continua, pero dependen de una batería de larga duración.
-
Modo dual: Es la combinación de las dos implementaciones anteriores. Está disponible para admitir dispositivos individuales, como teléfonos inteligentes o tabletas, que deben conectarse tanto a dispositivos BR / EDR (como auriculares de audio) como a dispositivos LE (como dispositivos portátiles o balizas de venta minorista).
iOS Core Bluetooth
El marco Core Bluetooth, provisto para aplicaciones iOS y Mac, permite la comunicación con dispositivos que están equipados con tecnología inalámbrica Bluetooth de baja energía (BLE). Esto significa que su aplicación puede descubrir, explorar e interactuar con dispositivos periféricos de baja energía, como monitores de frecuencia cardíaca y termostatos digitales.
La tecnología inalámbrica BLE se basa en la especificación Bluetooth 4.0. El marco de trabajo de Core Bluetooth es una abstracción de la pila de protocolos BLE. Significa que muchos de los detalles de bajo nivel están ocultos para el desarrollador, lo que facilita mucho el desarrollo de aplicaciones que interactúan con dispositivos BLE.
En Core Bluetooth, hay dos jugadores principales: el central y el periférico. Cada uno tiene un rol diferente. La función del periférico es compartir datos que consumen otros dispositivos, mientras que la central utiliza la información proporcionada por un periférico para realizar tareas.
Los periféricos dan a conocer su presencia anunciando los datos que tienen en los dispositivos circundantes. Mientras tanto, la central busca periféricos cercanos que puedan tener datos que le interesen. Cuando una central descubre un periférico, la central solicita conectarse al periférico y comienza a explorar e interactuar con los datos del periférico. El periférico se encarga de responder al central de forma adecuada.
Central and Peripheral Devices
Para aplicaciones de iOS, es muy importante saber si la aplicación se está ejecutando en primer plano o en segundo plano. Una aplicación que se ejecuta en modo de fondo se comporta de manera diferente porque los recursos del sistema son limitados en los dispositivos iOS.
Las aplicaciones de iOS admiten los modos de primer plano y de fondo para trabajar con Bluetooth, aunque cada uno tiene comportamientos diferentes.
Aplicaciones solo en primer plano
En este modo, cuando la aplicación está en un estado suspendido, no puede realizar tareas relacionadas con Bluetooth, ni es consciente de ningún evento relacionado con Bluetooth hasta que se reanuda en primer plano. Este comportamiento puede afectar su aplicación, según las tareas que esté realizando (por ejemplo, si su aplicación pasa al estado suspendido, tal vez el usuario cambie a otra aplicación). Si se pierde la conexión con el periférico mientras su aplicación está suspendida, no se dará cuenta de que se produjo ninguna desconexión hasta que su aplicación se reanude en primer plano.
Modos de ejecución en segundo plano
Habilite los modos de fondo en las capacidades de su proyecto para permitir que su aplicación se ejecute en modo de fondo y evitar los problemas antes mencionados.
Para que una aplicación continúe ejecutándose en segundo plano y realice tareas relacionadas con Bluetooth, debe estar activada para el modo de ejecución en segundo plano de Core Bluetooth en el archivo de lista de propiedades de información (Info.plist).
Hay dos modos de ejecución en segundo plano de Core Bluetooth que una aplicación puede declarar:
- Periférico Bluetooth
Para aplicaciones que comparten datos con CoreBluetooth e implementan la función de periférico. La aplicación comparte datos utilizando el marco Core Bluetooth.
- bluetooth-central
Para aplicaciones que se comunican mediante CoreBluetooth e implementan el rol central. Se comunica con periféricos Bluetooth de baja energía (BLE) utilizando el marco Core Bluetooth.
Importante: cuando edita la lista de propiedades, tenga en cuenta que el editor en Xcode, de forma predeterminada, muestra cadenas legibles por humanos para muchas claves en lugar de los nombres de las claves reales. Para mostrar el nombre real de la clave, como aparece en el archivo Info.plist, presione Control y haga clic en cualquiera de las claves en la ventana del editor y habilite el elemento Mostrar claves / valores sin procesar en la ventana contextual.
El modo de ejecución en segundo plano del periférico bluetooth
Este modo permite que la aplicación realice ciertas tareas de roles periféricos mientras está en segundo plano. Por lo tanto, el sistema activa su aplicación para procesar eventos de lectura, escritura y suscripción.
Debe tener en cuenta que los datos publicitarios mientras su aplicación está en modo de fondo son diferentes a cuando su aplicación está en modo de primer plano. En particular, cuando su aplicación se anuncia en segundo plano:
-
La clave de publicidad CBAdvertisementDataLocalNameKey se ignora y el nombre local del periférico no se anuncia.
-
Todos los UUID de servicio contenidos en el valor de la clave de publicidad CBAdvertisementDataServiceUUIDsKey se colocan en un área especial de "desbordamiento". Solo pueden ser descubiertos por un dispositivo iOS que los esté buscando explícitamente.
-
Si todas las aplicaciones publicitarias están en segundo plano, la frecuencia con la que su dispositivo periférico envía paquetes publicitarios puede disminuir.
El modo de ejecución en segundo plano del bluetooth central
Con este modo activado, su aplicación puede descubrir y conectarse a periféricos, así como explorar e interactuar con datos periféricos mientras está en el modo de fondo.
El sistema activa su aplicación cuando se invoca cualquiera de los métodos de delegado CBCentralManagerDelegate o CBPeripheralDelegate, lo que permite que su aplicación maneje eventos de función central importantes, como cuando se establece o se desactiva una conexión, cuando un periférico envía valores de características actualizados y cuando un el estado del gerente central cambia.
Tenga en cuenta que el escaneo de periféricos mientras su aplicación está en modo de fondo funciona de manera diferente que cuando su aplicación está en modo de primer plano:
-
La clave de opción de escaneo CBCentralManagerScanOptionAllowDuplicatesKey se ignora en el modo de fondo, y múltiples descubrimientos de un periférico publicitario se fusionan en un solo evento de descubrimiento. Este valor especifica si el análisis debe ejecutarse sin filtrado duplicado. Por lo tanto, cuando su aplicación se ejecuta en segundo plano, ignora esta opción y escanea solo los periféricos que no se han descubierto antes.
-
Si todas las aplicaciones de escaneo periférico están en segundo plano, aumenta el intervalo en el que su dispositivo central busca paquetes publicitarios. Como resultado, puede llevar más tiempo descubrir un periférico publicitario.
Recuperar una lista de periféricos conocidos
La primera vez que descubre un periférico, el sistema genera un identificador (un UUID, representado por un objeto NSUUID) para identificar el periférico. Luego puede almacenar este identificador y luego usarlo para intentar volver a conectarse al periférico usando el método retrievePeripheralsWithIdentifiers: de la clase CBCentralManager.
También puede comenzar a buscar periféricos, filtrados por una lista de servicios, utilizando el método scanForPeripheralsWithServices: options :. Para buscar periféricos mientras está en modo de fondo, debe indicar esta lista de servicios, de modo que la aplicación busque los periféricos con esos servicios.
Importante: tenga en cuenta que si no agrega ningún UUID de servicio, la aplicación no escaneará ningún periférico mientras esté en modo de fondo.
Tasa de escaneo
Cuando la aplicación entra en modo de fondo, los parámetros de escaneo se cambian para reducir el consumo de energía. Debe haber un equilibrio entre el rendimiento y el consumo de energía mientras el teléfono está en modo de espera.
Dado que el teléfono está escaneando con un ciclo de trabajo bajo, el periférico tendrá que hacer un esfuerzo adicional y anunciarse con más frecuencia. El tiempo de descubrimiento promedio aproximado cuando el teléfono está en espera es aproximadamente 60 veces el intervalo de publicidad. El tiempo de descubrimiento del percentil 95 cuando el teléfono está en modo de espera es aproximadamente 300 veces el intervalo de publicidad. Esto significa que, si el periférico se anuncia cada 20 ms, un iPhone en modo de espera lo descubriría en 6 segundos con una probabilidad del 95 por ciento.
Conclusión
Cuando profundiza en la tecnología y las opciones que ofrece la plataforma, se da cuenta de que trabajar con Bluetooth es muy sencillo. Tienes que lidiar con las limitaciones mientras trabajas en modos en segundo plano y crear una solución que se base en cómo funciona y se comporta iOS en diferentes escenarios. Asegúrese de que la programación de sus aplicaciones de iOS incluya las mejores opciones para el rendimiento y la eficiencia.