iBeacon: obtenir majeur et mineur - seulement à la recherche de l'uuid
Je suis en utilisant l'air de localiser exemple et de surveillance pour les iBeacons par uuid seulement. Quand j'arrive à l'entrée de la région de l'événement, je n'arrive pas à obtenir la majeure et la mineure de la balise ou d'une région qui a déclenché l'évènement, si je suis seulement à la recherche de l'uuid (je peux si je suis suivi pour un uuid avec majeure et mineure) - ce que quelqu'un connais un moyen de faire ceci j'ai loupé quelque chose?
Je n'ai pas vraiment envie de commencer allant - ne semble pas que j'en aurais besoin pour..
(Le cas d'utilisation est pour dire beaucoup de magasins avec des balises avec le même uuid, puis de l'émission d'un OS de notification de l'information pertinente à propos de ce magasin (obtenues en interrogeant les majeurs et mineurs))
Voici en gros ce que je fais:
CLBeaconRegion *region = [[CLBeaconRegion alloc] initWithProximityUUID:uuid
identifier:@"blah"];
region.notifyOnEntry = YES;
region.notifyOnExit = YES;
region.notifyEntryStateOnDisplay = YES;
[self.locationManager startMonitoringForRegion:region];
Puis dans l'app délégué:
- (void) locationManager:(CLocationManager*)manager didDetermineState:(CLRegionState)state forRegion:(CLRegion*)region {
//assume for now its the iBeacon
CLBeaconRegion *beaconRegion = (CLBeaconRegion*) region;
beaconRegion.major //hasn't been set...
}
Merci Beaucoup!
Vous devez vous connecter pour publier un commentaire.
Vous ne faites rien de mal. Aussi surprenant que cela puisse paraître, la surveillance de l'API ne vous donne pas la balise spécifique(s) qui a déclenché le changement de région.
La raison pour laquelle le majeur n'est pas défini sur le CLBeaconRegion objet est parce que c'est exactement le même objet que vous avez utilisé pour démarrer la surveillance, et que vous définissez ce champ à zéro (ou ne pas du tout en laissant le néant). Ce que vous êtes à la recherche d'une autre matrice de CLBeacon objets. Et comme vous le suggérez, ce n'est présente que sur les Api.
Ce n'est vraiment pas une grosse affaire pour commencer allant. Il suffit de le mettre en place à l'exact même temps que vous commencer à surveiller:
Et si vous ne se soucient que de la première allant appel, vous pouvez utiliser un drapeau à ignorer d'autres mises à jour:
Et réinitialiser le drapeau lorsque vous quittez la région
Comme un bonus, cela permettra également de faire le suivi des temps de réponse beaucoup plus rapide lorsque votre application est au premier plan. Voir: http://developer.radiusnetworks.com/2013/11/13/ibeacon-monitoring-in-the-background-and-foreground.html
Malheureusement, la détermination de la majeure et la mineure est disponible uniquement dans le iBeacon allant de l'API et de ne pas le iBeacon de l'API de surveillance si vous surveillée par UUID seulement. En outre,
1) iBeacon allant ne fonctionne pas pendant que votre application est en arrière-plan. Cela signifie que si votre application est en arrière-plan (ce qui est la plupart du temps pour ces types d'applications) vous ne pouvez pas déterminer la majeure et la mineure d'un iBeacon, sauf si vous avez suivis en se basant sur l'UUID de la, majeures et mineures.
2) Vous ne pouvez surveiller un maximum de 20 iBeacons en même temps. Cela signifie que si vous avez recours à la surveillance par l'UUID de la, majeures et mineures (pour obtenir autour de la allant en arrière-plan la question), vous serez limité à seulement 20 iBeacons (une grande limitation dans la plupart des cas pratiques).
3) Pour une évolutivité maximale (puisque vous ne pouvez simultanément moniteur 20 iBeacons), il serait préférable de surveiller par UUID seulement, avertir l'utilisateur lorsqu'un iBeacon de l'UUID est détecté et dès la notification à l'utilisateur pourrait reconnaître à apporter de l'application au premier plan. Une fois que l'application est au premier plan, allant peut se produire pour déterminer le majeur et mineur de l'iBeacon.
Tout cela m'amène à me demander pourquoi Apple ne comprend pas le tableau des iBeacons le déclenchement de l'entrée/sortie dans le suivi de l'API en premier lieu. Je laisse cela pour Apple commenter. Le post suivant va dans les détails sur ces iBeacon les comportements et les limitations d' - iBeacon en arrière - plan- les cas d'Utilisation
CLBeaconRegion est les critères de filtre pour trouver les balises. Donc, ce que vous transmettez est ce que vous obtiendrez lorsque "didEnterRegion" délégué incendies. Pas de surprise là.
CLBeacon est la personne invisible qui a pour s'adapter aux critères de filtre dans le feu de l'didEnterRegion délégué. Donc c'est ici que vous trouverez le majeur, mineur valeurs. Pour obtenir le phare qui a tiré, vous devez appeler les API startRangingBeaconsInRegion et de lui donner un nombre de 5 avant l'arrêt de l'allant. Le faire une fois que vous obtenez didEnterRegion de rappel. C'est tournés vers le fond de surveillance pour les balises, si vous ne voulez pas lancer votre application. mais il suffit de noter le lorsqu'un utilisateur passe par un phare pour la construction de l'intelligence sur le serveur pour mieux cibler sa campagne Publicitaire.
Allant parfois risquent de ne pas trouver toutes les balises, dans ce cas, utilisez la beaconRegion dans la fonction de rappel pour l'startRangingBeaconsInRegion de noter que quelqu'un est entré dans une balise région.