escuchar - Publicidad de CoreBluetooth en segundo plano en iOS 10
escuchar youtube en segundo plano iphone (2)
Esto no es algo específico para iOS 10: siempre ha sido así en iOS. En iOS, las aplicaciones simplemente no pueden enviar anuncios Bluetooth LE estándar cuando están en segundo plano . Deben estar en primer plano para hacer esto.
Dicho esto, existe un apoyo limitado en iOS para las aplicaciones que publicitan los servicios del GATT en segundo plano. Utiliza una técnica patentada que solo funciona con otros dispositivos iOS que buscan esos servicios. (Debido a que utiliza un esquema patentado no estándar, la misma técnica no funcionará para anuncios de balizas, por ejemplo).
Así es como Apple lo describe:
... debe tener en cuenta que la publicidad mientras su aplicación está en segundo plano funciona de manera diferente que cuando su aplicación está en primer plano. En particular, cuando su aplicación se anuncia mientras está 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 publicitaria CBAdvertisementDataServiceUUIDsKey se colocan en un área especial de "desbordamiento"; solo pueden ser descubiertos por un dispositivo iOS que los escanea explícitamente.
- Si todas las aplicaciones que anuncian están en segundo plano, la frecuencia a la que su dispositivo periférico envía paquetes publicitarios puede disminuir.
Primero: tengo un iPad Air 2 y un iPhone 7. Para seguir leyendo, estimamos que la aplicación está activa y abierta en el iPad y en modo de fondo en el iPhone. La aplicación es exactamente la misma, incluso con los mismos UUID de servicio de Bluetooth y la misma clave de nombre de datos.
Quiero escribir una aplicación que pueda anunciar un servicio bluetooth en segundo plano y pueda descubrir este servicio (también es óptimo en segundo plano). Como ya leí, no puedo usar la tecnología de Apple Beacon porque allí solo es posible obtener un escaneo / notificación por balizas en un segundo plano (lo probé, funciona bien) pero no para anunciar. Así que comencé a usar CoreBluetooth como se describe en la respuesta SO mencionada porque allí es posible anunciar en segundo plano.
Mi aplicación llama didDiscoverPeripheral
método didDiscoverPeripheral
en CBCentralManagerDelegate en el iPhone (aplicación en segundo plano), por lo que detectó el iPad. La propiedad isAdvertising
de CBPeripheralManager en iPhone es true
. Pero didDiscoverPeripheral
no se llama en iPad. Estoy un poco confundido. Una opción es que mi iPad ya no puede detectar el iPhone por alguna razón o mi iPhone miente y no es publicidad.
Así que pensé que soy un poco tonto y busqué en Google las "aplicaciones de depuración CoreBluetooth". Encontré Vicinity y AltBeacon . ¡Y con ambas aplicaciones el comportamiento es el mismo! Si tiene antecedentes (presione el botón de inicio / suspensión) de la aplicación de publicidad, la aplicación de navegación ya no podrá descubrirla. Si abre el fondo de la aplicación, lo descubrirá al instante. Ambas aplicaciones mencionan que es posible transmitirlas en segundo plano.
Estoy haciendo algo mal; se espera este comportamiento? ¿Entendí mal el marco? ¿Puedes confirmar este comportamiento?
Para confirmar esto, la forma más rápida es instalar Vicinity en dos dispositivos (debe agregar la clave NSBluetoothPeripheralUsageDescription a Info.plist) establecer un dispositivo para transmitir y presionar el botón de inicio.
era un error en ios 10.0. (1) y parcialmente corregido en ios 10.1