2017-01-20 1 views
0

Je souhaite afficher une seule notification lorsqu'une balise entre dans la région. J'ai utilisé le code suivant:Afficher la notification lorsque la balise est dans la région

func locationManager(_ manager: CLLocationManager, didEnterRegion region: CLRegion) { 
    if region is CLBeaconRegion { 
     BeaconNotificationFound() 
    } 
} 

Le gestionnaire d'emplacements et la région sont corrects. Le seul problème est que, avec cette fonction, rien ne se passe. Que puis-je faire?

C'est le code ci-dessus:

let locationManager = CLLocationManager() 
let region = CLBeaconRegion(proximityUUID: UUID(uuidString: "E2C56DB5-DFFB-48D2-B060-D0F5A71096E0")!, identifier: "AirLocate") 

    override func viewDidLoad() { 
    super.viewDidLoad() 

    //Darf Standort genutzt werden? 
    locationManager.delegate = self 
    if (CLLocationManager.authorizationStatus() != CLAuthorizationStatus.authorizedWhenInUse) { 
     locationManager.requestWhenInUseAuthorization() 
     } 
    locationManager.startRangingBeacons(in: region) 
    locationManager.startMonitoring(for: region) 
} 
+0

Savez-vous si cette méthode est appelée? – davidgyoung

+0

Oui, la fonction fonctionne. Il l'a essayé sur une autre position. – luki512

+0

OK, savez-vous que le BeaconNotificationFound() est appelé dans ce cas? Le problème peut simplement être que ce n'est pas le cas, que vous n'obtenez pas de rappel d'entrée de région. Il y a beaucoup, beaucoup de raisons cela peut arriver. Vous avez probablement besoin de montrer votre code qui configure la surveillance de la région, et demande des autorisations de localisation dans votre application afin que nous puissions être sûrs que tout est correct. – davidgyoung

Répondre

0

On dirait que vous ne recevez pas callbacks la méthode didEnterRegion. Quelques choses à vérifier:

  1. Assurez-vous que votre Info.plist contient une entrée comme ci-dessous, sinon il ne sera pas en mesure de vous demander l'accès de l'emplacement: <key>NSLocationWhenInUseUsageDescription</key><string>This app needs to access your location so it can tell when you are near a beacon.</string>
  2. Assurez-vous que vous êtes invité pour l'emplacement l'accès et vous l'avez effectivement accordé. Vérifiez dans Paramètres -> [Nom de votre application] -> Emplacement, et vérifiez qu'il est indiqué "Autoriser l'accès à l'emplacement" a une coche qui n'est pas à côté de Jamais.

  3. Assurez-vous que Bluetooth est activé.

  4. Forcer une sortie de région en mettant votre application au premier plan et en éteignant la balise pendant au moins 60 secondes. Une fois cela fait, rallumez la balise. Si rien de ce qui précède ne fonctionne, utilisez une application de détection de balise disponible dans le commerce telle que Locate ou AirLocate pour vérifier qu'elle peut voir votre balise lors de la transmission. Si vous utilisez l'une de ces applications, vous devez configurer votre UUID dans l'application pour la détection. A quoi ressemble le code dans BeaconNotificationFound()?