2017-08-08 1 views
0

J'ai posé cette question à quelques reprises (here et here) sans réponses utilisables je vais donc poser d'une manière différente maintenant ...application iOS par IBeacon lorsqu'il était encore connecté à Bluetooth

Qu'est-ce que J'ai besoin

Je dois être en mesure de réveiller mon application de terminé, envoyer et recevoir des données à partir d'un périphérique Bluetooth que j'ai moi-même programmé. Ce sont des données importantes pour des raisons de sécurité, donc j'ai absolument besoin de l'application pour se réveiller. Cependant, l'appareil n'est pas toujours éteint la plupart du temps, donc j'ai besoin que ce cas d'utilisation soit géré lorsque le périphérique est allumé/éteint. Pour ce faire, je dois utiliser iBeacon pour réveiller l'application, envoyer une commande à la boîte, obtenir une réponse, puis passer en mode d'échange continu. Si le périphérique est éteint, je m'en fous, juste quand il est réactivé c'est quand j'ai besoin du processus d'échange de données continu pour redémarrer.

Le problème

J'ai essayé toutes les suggestions "arrière-plan" app wakable articles Info.plist ... Voip, audio d'arrière-plan, IBeacon et méthodes de délégué Bluetooth didConnectPeripheral/didDisconnect et rien ne fonctionne vraiment très fiable. Pendant quelques jours, j'ai eu les méthodes iBeacon didEnterRegion et didExitRegion tirant quand je voudrais brancher/débrancher mon appareil au moins il ya quelque chose de fiable. Le vrai problème commence si j'utilise iBeacon pour réveiller l'application et me connecter à Bluetooth (parce que je ne peux pas échanger d'informations avec la boîte jusqu'à ce que je me connecte/paire au niveau du système iOS). Étant donné que l'application n'a pas encore été associée, aucune des commandes en arrière-plan ne parvient à la boîte. Lorsque ce processus est démarré en arrière-plan, aucun message ne vous demande si vous souhaitez coupler avec ce périphérique (tout fonctionne correctement lorsque l'application est en cours d'exécution et que vous pouvez coupler). De plus, même si j'avais une chance de coupler, je serais maintenant connecté/couplé de façon permanente (ce que je ne voudrais pas que l'utilisateur doive appuyer sur «appairer» chaque fois que je branche l'appareil et l'application). est fermé). Sauf si l'utilisateur entre dans les paramètres bluetooth et "oublie l'appareil", je ne peux pas les déconnecter. Par conséquent, je viens de perdre ma capacité à utiliser iBeacon pour réveiller l'application une fois qu'il est fermé, car maintenant iBeacon ne se déclenchera jamais tant que l'application est connectée via Bluetooth.

Ma question (s)

Comment sont les autres applications font cela si facilement et ce qui est le flux approprié pour se réveiller de façon permanente votre application de fond/fin? Je me bats pour comprendre le flux ici.

Est-ce que je m'attends vraiment à n'utiliser iBeacon que dans les cas où aucune connectivité ou appariement n'est requis? Suis-je censé déconnecter l'utilisateur d'une manière ou d'une autre du périphérique?

Summation

Donc, en résumé, en utilisant IBeacon pour réveiller l'application, ne fonctionne pas si vous devez vous connecter/paire à un périphérique car alors ces méthodes ne seront jamais à nouveau le feu jusqu'à ce qu'il n'y est plus associé/connecté. Si je devais trouver un moyen magique de déconnecter une personne quand l'application meurt et revenir à iBeacon, cela ne fonctionnerait pas parce que je n'arrive pas à apparier l'arrière-plan pour que les commandes ne parviennent pas au périphérique. Enfin, si j'utilise une approche Bluetooth purement connectée, les méthodes didConnect et didDisconnect ne se déclenchent jamais lorsque je branche/débranche l'appareil.

Répondre

1

Quelques réflexions:

  1. Oui, BLE Les périphériques arrêtent généralement la publicité lorsque vous êtes connecté. Dans cet état, vous ne pouvez pas obtenir un réveil d'application iBeacon si le périphérique BLE n'annonce plus la balise.

    • Bien que ce comportement soit typique, il ne s'agit pas d'une règle absolue. Il est possible de créer des périphériques qui conservent la publicité lorsqu'ils sont connectés, bien qu'il puisse y avoir des limitations avec le chipset que vous utilisez. Une approche commune pour empêcher les connexions permanentes consiste à créer un code périphérique qui se déconnectera automatiquement s'il n'y a pas eu de communication avec le téléphone portable dans X secondes ou minutes. Cela permettra de recommencer le balisage.

  2. appairage Bluetooth et connexions BLE ne fonctionnent pas de la même façon. Vous pouvez établir une connexion BLE en arrière-plan sans interaction de l'utilisateur. Les connexions BLE (pas d'appariement) sont généralement utilisées pour le rendre automatique. Une connexion à un service GATT peut être établi en arrière-plan et les données échangées avec le mode d'arrière-plan suivant dans le plist (qui ne nécessite aucune justification particulière App Store):

    <key>UIBackgroundModes</key> 
    <array> 
        <string>bluetooth-central</string> 
    </array> 
    
  3. Si vous ne voulez vraiment jumeler l'interaction de l'utilisateur, vous devrez prendre les mesures suivantes:

    • Lorsque la balise est détectée en arrière-plan, envoyez une notification locale à l'utilisateur pour lui demander de lancer l'application à coupler. (Ajustez la langue pour correspondre à votre cas d'utilisation.)
    • Lorsque l'utilisateur appuie sur la notification, l'application arrive au premier plan. Détectez ceci et commencez le processus d'appariement.
+0

Merci @davidgyoung, malheureusement cependant, je ne peux pas permettre à l'appariement/connexion tomber uniquement entre les mains de l'interactivité de l'utilisateur. Cela doit être vraiment passif et hors de l'utilisateur. Je préférerais absolument ne pas coupler et simplement me connecter (puisque je peux déjà le faire) mais le dispositif BLE GATT que j'utilise (Bluefruit feather nrf52) nécessite, je crois, l'appairage pour pouvoir envoyer les données sur une caractéristique. Est-ce correct? Si ce n'est pas le cas, j'ai besoin d'aide pour trouver comment changer un fichier de croquis pour ne pas avoir besoin d'appariement. – GoreDefex

+0

C'est une question spécifique au produit, que je ne peux malheureusement pas répondre. Mais je suis d'accord qu'il est essentiel pour votre cas d'utilisation de faire fonctionner cet appareil ou un autre sans jumelage. – davidgyoung

+0

L'appairage (en fait, le collage, mais il est appelé appariement dans la boîte de dialogue) n'est requis que si la caractéristique indique qu'un chiffrement est requis. Si vous supprimez l'exigence de chiffrement de votre caractéristique, une application iOS peut simplement se connecter au périphérique sans intervention de l'utilisateur. Il ne devrait y avoir aucune raison d'utiliser iBeacon pour cela si vous implémentez une connexion en attente à votre périphérique et mettez en œuvre pour la restauration de l'état Bluetooth de base. Si vous avez "absolument besoin de l'application pour vous réveiller", vous risquez de ne pas avoir de chance. Il n'y a pas de garantie de 100% sur le fond Bluetooth dans mon expérience – Paulw11