La plage de proximité pour les balises change d'avant en arrière, même lorsque l'application est au même endroit

La plage Beacon Proximity change la réponse de proximité en Near – Immediate – Far, même si le périphérique ios rest au même endroit.

Comme j'ouvre une vue lorsque la réponse de proximité est proche. Je reçois la réponse de proximité d'avant en arrière, proche – immédiate puis proche. Il montre la vue encore et encore

Comment pouvons-nous résoudre ce problème? Y a-t-il un gestionnaire d'événement?

Merci.

Les valeurs de proximité et de précision semblent être assez «bruyantes». Cela peut aussi dépendre de votre environnement. L'eau (et donc les personnes) absorbe les fréquences utilisées par Bluetooth pour que les personnes qui se déplacent puissent avoir un impact, mais j'observe une variation entre 1,2 m et 1,9 m lorsque les deux appareils sont assis sur mon bureau.

Je pense que vous allez devoir faire face au bruit de votre application. Une fois qu'une vue est ouverte, vous devez la garder ouverte jusqu'à ce que la balise soit "loin" (ou que vous obteniez une sortie de région) pendant un certain time. Si l'état passe à proximité ou immédiat, réinitialisez le temporisateur.

Vous devez utiliser un code similaire à celui-ci –

-(void)locationManager:(CLLocationManager *)manager didRangeBeacons:(NSArray *)beacons inRegion:(CLBeaconRegion *)region { CLBeacon *beacon=beacons[0]; switch (beacon.proximity) { case CLProximityFar: if (self.farTimer==nil) { self.farTimer=[NSTimer scheduledTimerWithTimeInterval:30 target:self selector:@selector(farTimerFired:) userInfo:beacon repeats:NO]; } break; case CLProximityNear: case CLProximityImmediate: if (self.farTimer!=nil) { [self.farTimer invalidate]; self.farTimer=nil; } break; case CLProximityUnknown: NSLog(@"Beacon proximity is unknown"); break; } } -(void) farTimerFired:(NSTimer *)timer { CLBeacon *beacon=(CLBeacon *)timer.userInfo; NSLog(@"Beacon %@ is really far",beacon.proximityUUID.UUIDSsortingng); self.farTimer=nil; } 

Comprendre que la valeur de proximité est juste une estimation basée sur la force du signal radio , donc c'est un comportement attendu dû au bruit comme le dit @ Paulw11 dans sa réponse.

Deux choses que vous pouvez faire pour rendre les lectures de proximité (et de précision) aussi solides que possible:

  1. Choisissez un iBeacon avec un taux de transmission aussi rapide que possible. Différents ibeacons transmettent des publicités à des fréquences différentes de 30 fois par seconde à une fois par seconde ou less. Généralement, les vitesses de transmission plus rapides vous donnent des estimations de distance less bruyantes car elles permettent à iOS d'utiliser plus de mesures de force du signal radio. Pour vos tests, essayez un iBeacon basé sur iOS comme Locate for iBeacon pour voir si cela aide. Il est connu de transmettre 30x par seconde.

  2. Assurez-vous que votre iBeacon est correctement calibré. Cela ne réduira pas le bruit, mais il s'assurera que les lectures que vous obtenez sont correctes en moyenne. S'il n'est pas correctement calibré, vous pouvez voir des sauts entre l'instantané et le plus proche lorsque l'appareil est solidement dans la zone immédiate, car il calcule la distance comme trop éloignée.

Au-delà, un filter logiciel sur la valeur de proximité pourrait aider, comme le suggère @ Paulw11, mais il ne sera toujours pas parfait. Vous devez simplement décider si vous pouvez vivre avec le bruit pour votre cas d'utilisation.