web-dev-qa-db-fra.com

Rechercher tous les iBeacons et pas seulement avec un UUID spécifique

Est-il possible de rechercher toutes les iBeacons qui se trouvent à proximité? Je sais qu'il est possible de rechercher iBeacons par UUID. Mais je veux trouver tout iBeacons à proximité. 

20
Christian

Un iBeacon est une région et a pour propriété de définir l'UUID. Par conséquent, vous ne pouvez rechercher que ceux correspondant à un UUID . Une fois que vous en avez trouvé un ou plusieurs avec un UUID spécifique, vous pouvez déterminer le plus proche à l'aide des rappels de délégué, où les balises sont stockées dans un tableau ordonné par distance. .

Il existe un excellent exemple de code à ce sujet et une session vidéo assez détaillée de WWDC: "Quoi de neuf dans Core Location"

12
Joride

les iBeacons sont des constructions de niveau supérieur aux périphériques BLE classiques. D'après ce que peuvent déterminer les documents Apple, les balises sont liées à leur UUID de service. c'est-à-dire qu'une famille de balises est une "région" et vous entrez dans une région et en sortez en fonction de la portée et de la visibilité d'une balise pour VOUS, et non l'inverse. Malheureusement, Apple a utilisé le terme région, que la plupart d'entre nous associons probablement à MapKit, ce qui ajoute à la confusion générale. 

Voici la mauvaise nouvelle: vous ne pouvez rechercher que des ProximityUUID que vous connaissez, il n'y a pas de "générique" proximisUUID. De plus, les CLBeacons n'exposent pas les entrailles de niveau inférieur de CoreBluetooth. Si vous voulez trouver toutes les balises qui se trouvent près de chez vous, vous devrez utiliser CoreBluetooth, rechercher les périphériques, puis regarder les périphériques restitués. et interrogez chacun d'eux pour trouver des balises. Bien sûr, Apple n’a ni enregistré (avec le Bluetooth SIG), ni (encore) publié les caractéristiques de l’iBeacon. Vous aurez donc besoin d’un renifleur BT pour procéder à une ingénierie inverse permettant de déterminer ce qui constitue un iBeacon à partir de tout autre périphérique BLE. 

7
dhmspector

Malheureusement, vous ne pouvez pas actuellement rechercher un iBeacon arbitraire sans connaître d'abord la valeur de proximitéUUID. J'ai essayé d'écrire directement sur COREBluetooth et, bien que vous puissiez découvrir des balises émettrices de votre région et vous connecter à celles-ci, vous obtenez en retour un charabia sans rapport avec l'UUID BLE. Vous ne pouvez donc même pas confirmer que le périphérique auquel vous vous êtes connecté est en fait un iBeacon.

Cela ne semble pas être une limitation de la spécification BLE, mais une limitation qui a été imposée par Apple. Il semble également que cette limitation n'existe pas pour la plate-forme Android.

Jusqu'à ce que cet écart soit comblé, Android aura un avantage significatif sur iOS dans ce domaine.

Je ne suis pas d'accord avec les commentaires précédents selon lesquels le balayage des identificateurs UUID serait inutile. Au contraire, si vous connaissez l'UUID de balise, vous pouvez créer une carte de balise/emplacement/sujet dans le nuage et l'utiliser pour naviguer (en supposant que la balise soit corrigée) à l'aide d'un service Web. Vous pouvez regrouper les données en une source de données afin qu'une base de données très riche de paires d'identificateurs UUID/emplacement de beacon soit disponible pour tous ceux qui souhaitent écrire des applications d'emplacement. C'est peut-être pour cette raison qu'Apple cache les informations. ils peuvent le retenir pour leurs propres besoins.

5
TNBtech

chaque APP utiliserait son propre UUID spécifique, en utilisant les valeurs entières "majeur" et "mineur" pour différencier les balises.

par exemple, l'UUID serait associé à une chaîne de magasins, le majeur identifierait le magasin et le mineur l'allée, voire un groupe de produits.

la recherche d’UUID inconnus ne serait pas très utile, car votre application ne saurait pas quoi faire avec ces informations.

l'UUID est généré une fois pour toutes à l'aide de la commande "uuidgen" du terminal.

malheureusement, il n'y a pas de protocole pour réellement communiquer avec les balises, donc il n'y a pas de norme pour obtenir l'emplacement d'une balise, ni aucune autre information utile.

cela aurait été tellement mieux si nous pouvions établir une connexion avec une balise, généralement la plus proche, et en obtenir des données supplémentaires sans avoir à utiliser le même réseau WIFI.

soit vous devez utiliser bonjour pour communiquer avec l'appareil via WIFI, ou bien utiliser les identifiants majeur et mineur pour obtenir des données à partir d'un service Web quelconque.

5
0
Heath Borders