Comment réveiller l'application iOS avec le signal Bluetooth (BLE)

en utilisant le BLE avec CoreBluetooth (pas iBeacon), y at-il un moyen de réveiller l'application une application qui ne fonctionne pas lorsque l'appareil reçoit un signal Bluetooth?

Je simule une balise avec le bouclier BLE de Redbearlab ( http://redbearlab.com/bleshield/ ).

Merci, DAN

* MISE À JOUR 03/05/14 *

Il semble qu'Apple ait introduit une mise à jour majeure avec iOS 7.1: maintenant iOS ouvrira votre application si elle détecte un UUID correspondant à votre application. L'application doit uniquement être installée, elle ne doit pas être en cours d'exécution (logique dans AppDelegate nécessaire pour répondre à l'appel de réveil).

Si l'application fonctionnait en arrière-plan, puis fermée (je veux dire ici terminé – et vous ne le voyez plus dans la list des applications en arrière-plan lorsque vous double-click le button d'accueil) en raison de la pression de la memory d'autres applications, prenez soin de le réveiller quand un délégué est appelé (en supposant que vous avez les modes d'arrière-plan listés dans .plist).

Si l'application fonctionnait en arrière-plan, puis fermée par l'user (ici, je veux dire terminé ici.) L'user double-clique pour afficher la list des applications en arrière-plan et clique sur votre application dans la list d'arrière-plan puis appuyez sur le «x» à côté de l'application pour le tuer) alors ceci est une indication claire que l'user ne veut pas que l'application fonctionne en arrière-plan et l'application ne sera pas relancée. L'user doit relancer l'application pour que ses delegates puissent recommencer à fonctionner en arrière-plan (nouveau dans iOS7).

Mise à jour: Je ne suis pas sûr si cela est dans la documentation mais il est dans la video CoreBluetooth WWDC 2013. Je vous recommand de le regarder. Ils ont passé une bonne partie de la video sur le comportement de CoreBluetooth en arrière-plan.

D'après ce que je comprends, si votre application n'a pas précédemment connecté avec le périphérique BLE, alors non.

Si votre application s'est déjà connectée au périphérique BLE, utilisez:

-connectPeripheral: options

Les requests de connection ne sont pas expirées. Le meilleur endroit pour appeler cette méthode est lorsque votre application perd la connectivité avec le périphérique BLE. Vous recevrez une notification lorsque vous perdez la connection au périphérique dans le protocole CBCentralManagerDelegate:

-centralManager: didDisconnectPeripheral: erreur

Donc, la prochaine fois que votre application sera à scope du périphérique BLE, elle triggersra cette méthode. Notez également que vous devrez configurer la conservation et la restauration d'état lorsque vous initialisez un CBCentralManager.

https://developer.apple.com/library/ios/documentation/NetworkingInternetWeb/Conceptual/CoreBluetooth_concepts/CoreBluetoothBackgroundProcessingForIOSApps/PerformingTasksWhileYourAppIsInTheBackground.html

le système réveille votre application lorsque l'une des methods de délégué CBCentralManagerDelegate ou CBPeripheralDelegate est appelée, permettant à votre application de gérer des events de rôle central importants, par exemple lorsqu'une connection est établie ou démontée, lorsqu'un périphérique envoie des valeurs de caractéristiques mises à jour et changements d'état du gestionnaire central.

Pour exécuter certaines tâches de rôle de périphérique en arrière-plan, vous devez inclure la key UIBackgroundModes avec la valeur bluetooth-périphérique dans le file Info.plist de votre application. Lorsque cette paire valeur / key est incluse dans le file Info.plist de l'application, le système active votre application pour traiter les events de lecture, d'écriture et d'abonnement.

Vous pouvez essayer de déclarer voip dans info.plist. Pour le moment, mon application a été relancée automatiquement après un certain time, même l'user l'a interrompu.