1

Je dispose d'un périphérique balise qui diffuse différentes valeurs UUID en fonction d'un schéma de rotation personnalisé.Est-il possible de définir dynamiquement UUID sur l'application iBeacon?

Habituellement, le développeur doit définir UUID statique à être reconnu par l'application comme (par exemple pour iOS):

CLBeaconRegion *region = [[CLBeaconRegion alloc] initWithProximityUUID:uuid major:major minor:minor identifier:identifier]; 

Je me demandais s'il y a un moyen de générer dynamiquement (ou recevoir d'un serveur) les UUID à reconnaître.

Cela dit que je suis encore de la difficulté à comprendre les mécanismes internes de la façon dont les balises sont comprises par iOS et Android. D'après ce que je comprends, le module BLE du téléphone transmet tous les iBeacons bien formées à l'OS qui maintient une liste d'UUID reconnus. Après une simple recherche et si une correspondance est trouvée, l'OS amènera l'application correspondante au premier plan.

Cependant, quand est-UUID reconnu (s) de l'application se faire enregistrer avec le système d'exploitation? À quelle fréquence sont-ils réinscrits? Je serais reconnaissant si quelqu'un me signalerait tout matériel en ligne pertinent ou au moins la mention des mécanismes impliqués dans ce processus.

Répondre

0

Sur Android et iOS pour l'enregistrement ProximityUUIDs de balise pour détecter équivaut à rien de plus que d'appliquer un filtre sur les paquets Bluetooth qui correspondent au motif d'octets de la balise et ProximityUUID. La différence importante est que sur iOS le cadre du système d'exploitation qui fait le filtrage, CoreLocation, impose des limites sévères sur les filtres vous pouvez avoir. Les limites iOS sont les suivantes:

  • Vous ne pouvez contrôler qu'un seul UUID à la fois pour une seule application.
  • Dispositif à l'échelle limite des 30 premiers UUID surveillés obtient assistée par le matériel de détection rapide. Plus tard, les UUID à enregistrer obtiennent des détections plus lentes (retard de plusieurs minutes en arrière-plan).
  • Vous ne pouvez pas surveiller ou plage pour tout UUID (générique global)

Vous pouvez toutefois modifier les 20 UUID vous surveille l'application à tout moment - même une fois toutes les quelques secondes. L'astuce est que votre application doit être au premier plan pour le faire, ou avoir un moyen autorisé de s'exécuter en arrière-plan pour faire cette rotation UUID.

Pour enregistrer un UUID pour le contrôle sur iOS, vous déclarez simplement une région qui UUID (généralement sans spécifier des valeurs majeures et mineures) puis appelez:

[locationManager startMonitoringForRegion:region]; 

Pour éviter de dépasser votre 20 région limite vous devez également appeler:

[locationManager stopMonitoringForRegion:oldRegion]; 

Sur vos anciennes régions, vous ne voulez plus surveiller. Sinon, si vous dépassez la limite de 20, vous ne pourrez pas détecter les régions nouvellement enregistrées.

Bien sûr, vous pouvez utiliser un service Web pour fournir les UUID pour vos nouvelles régions à surveiller.

Sur Android, c'est beaucoup plus simple - vous pouvez surveiller tous les UUID en spécifiant un caractère générique global en utilisant la bibliothèque Android Beacon et des SDK similaires. La divulgation complète: Je suis le développeur principal sur la bibliothèque Android Beacon, la première mise en œuvre de la balise sur cette plate-forme.

+0

J'ai lu votre remarque au sujet de la limite de 20 UUIDS par application ici aussi: https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/LocationAwarenessPG/RegionMonitoring/RegionMonitoring.html mais je dois dire que je vient de mettre en place une application qui ne couvre que 40+ régions différentes (chacune avec un UUID différent) et qui ne me donne pas d'erreur. J'ai utilisé macbeacon au lieu de vraies balises, donc je ne peux tester qu'un UUID par seconde (pas d'UUID simultanés). Aussi l'appareil que j'ai utilisé est un iPhone 6s plus et l'application est en cours d'exécution au premier plan. Quelque chose a changé? –

+0

"revient à rien de plus que d'appliquer un filtre sur les paquets Bluetooth" dans Android est ce processus de filtrage partie de la bibliothèque Android Beacon? Si oui, étant donné le grand nombre d'UUID autorisés (+ majeurs, mineurs) et le nombre potentiellement important de balises capturées dans une zone, comment cet appariement peut-il être efficace? Je suppose qu'il doit s'agir d'un système progressif d'octets par octets. –

+0

Oui, pour être plus précis, la limite de 20 régions sur iOS s'applique uniquement aux API de surveillance, et non aux API. Mais étant donné que la télémétrie est généralement limitée au premier plan, il est important de noter la limitation pour la détection de l'arrière-plan. – davidgyoung