Premièrement : j'ai un iPad Air 2 et un iPhone 7. Pour plus de détails, nous estimons que l'application est active et ouverte sur l'iPad et en mode arrière-plan sur l'iPhone. L'application est exactement la même, même avec les mêmes UUID de service Bluetooth et la même clé DataLocalName.
Je veux écrire une application qui peut diffuser un service bluetooth en arrière-plan et est capable de découvrir ce service (idéalement en arrière-plan également). Comme je l'ai déjà lu, je ne peux pas utiliser la technologie beacon d'Apple car il n'est possible de scanner/d'être notifié par les balises à proximité en arrière-plan (j'ai testé cela, ça fonctionne bien) mais pas de diffuser. J'ai donc commencé à utiliser CoreBluetooth comme décrit dans la réponse SO mentionnée car il est possible de diffuser en arrière-plan.
Mon application appelle la méthode didDiscoverPeripheral
dans CBCentralManagerDelegate sur l'iPhone (application en arrière-plan), donc elle détecte l'iPad. La propriété isAdvertising
de CBPeripheralManager sur l'iPhone est true
. Mais didDiscoverPeripheral
n'est pas appelé sur l'iPad. Je suis un peu confus. Une option est que mon iPad n'est plus en mesure de détecter l'iPhone pour une raison quelconque ou que mon iPhone ment et ne diffuse pas.
Donc j'ai pensé que je suis juste un peu bête et j'ai cherché sur "CoreBluetooth debug apps". J'ai trouvé Vicinity et AltBeacon. Et avec les deux applications, le comportement est le même ! Si vous mettez en arrière-plan (en appuyant sur le bouton home/sleep) l'application de diffusion, l'application de recherche n'est plus en mesure de le découvrir. Si vous ouvrez l'application en arrière-plan, elle le découvrira instantanément. Les deux applications mentionnent qu'il est possible avec elles de diffuser en arrière-plan.
Est-ce que je fais quelque chose de mal ; ce comportement est-il attendu ? Ai-je mal compris le framework ? Pouvez-vous confirmer ce comportement ?
Pour confirmer cela, la manière la plus rapide est d'installer Vicinity sur deux appareils (vous devez ajouter la clé NSBluetoothPeripheralUsageDescription
à Info.plist) configurer un appareil pour diffuser et appuyer sur le bouton home.