2017-01-20 4 views
0

ビーコンが領域に入ったときに単一の通知を表示したい。私は次のコードを使用しました:ビーコンが領域内にあるときの通知を表示

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

ロケーションマネージャと地域が正しいです。唯一の問題は、この関数では何も起こらないということです。 どうすればいいですか?

これは上記のコードです:

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

BeaconNotificationFound()内のコードはどのように見えますか?このメソッドが呼び出されるかどうか知っていますか? – davidgyoung

+0

はい、この機能は動作しています。それは別の位置でそれを試みた。 – luki512

+0

OK、この場合、BeaconNotificationFound()が呼び出されることは知っていますか?問題は単にリージョンエントリコールバックを取得していないということだけかもしれません。これが起こるかもしれない多くの、多くの理由があります。地域の監視を設定するコードを表示する必要があり、すべてが正しいことを確認できるようにアプリケーションのロケーション権限を要求する必要があります。 – davidgyoung

答えて

0

あなたはdidEnterRegionメソッドへのコールバックを取得されていませんようですね。チェックするためにいくつかのこと:

  1. それ以外の場合は、場所へのアクセスのためのプロンプトを表示することはできません、あなたのInfo.plistは、以下のようなエントリが含まれていることを確認してください:<key>NSLocationWhenInUseUsageDescription</key><string>This app needs to access your location so it can tell when you are near a beacon.</string>
  2. はあなたが場所を入力するように求めていることを確認しますあなたは実際にそれを許可しました。設定 - > [あなたのアプリ名] - > [場所]をチェックして、[許可する場所のアクセス]にチェックマークがないことを確認します。

  3. ブルートゥースがオンになっていることを確認してください。

  4. アプリをフォアグラウンドにして、少なくとも60秒間ビーコンをオフにすることで、強制的に地域を終了します。これが完了したら、ビーコンを再びオンにします。

  5. 上記のいずれも該当しない場合は、LocateまたはAirLocateのような棚のビーコン検出アプリを使用して、送信時にビーコンが表示されることを確認してください。これらのアプリのいずれかを使用している場合は、検出するためにアプリでUUIDを設定する必要があります。

関連する問題