前提・実現したいこと
iPhoneでiBeaconを受信してメッセージを出したいです。
プログラム事態にエラーメッセージなどは無いのですが、なぜか、メッセージが表示されません。
func locationManager(_ manager: CLLocationManager, didDetermineState state: CLRegionState, for inRegion: CLRegion) {
このプログラムから動いていなく、switch文から動いていない状況です。
swift Xcode
該当のソースコード
ソースコード
import UIKit import CoreLocation class ViewController: UIViewController, CLLocationManagerDelegate { @IBOutlet weak var status: UILabel! //beaconの値取得関係の変数 var trackLocationManager : CLLocationManager! var beaconRegion : CLBeaconRegion! override func viewDidLoad() { super.viewDidLoad() // ロケーションマネージャを作成する trackLocationManager = CLLocationManager(); // デリゲートを自身に設定 trackLocationManager.delegate = self; // BeaconのUUIDを設定 let uuid:UUID? = UUID(uuidString: "9cdc16d0-f9ea-4eba-8db9-0ec18844a76b") //Beacon領域を作成 beaconRegion = CLBeaconRegion(proximityUUID: uuid!, identifier: "net.noumenon-th") // セキュリティ認証のステータスを取得 let status = CLLocationManager.authorizationStatus() // まだ認証が得られていない場合は、認証ダイアログを表示 if(status == CLAuthorizationStatus.notDetermined) { trackLocationManager.requestWhenInUseAuthorization() } } //位置認証のステータスが変更された時に呼ばれる func locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) { //観測を開始させる trackLocationManager.startMonitoring(for: self.beaconRegion) } //観測の開始に成功すると呼ばれる func locationManager(_ manager: CLLocationManager, didStartMonitoringFor region: CLRegion) { //観測開始に成功したら、領域内にいるかどうかの判定をおこなう。→(didDetermineState)へ trackLocationManager.requestState(for: self.beaconRegion) } //ここまでは動いている。 //領域内にいるかどうかを判定する func locationManager(_ manager: CLLocationManager, didDetermineState state: CLRegionState, for inRegion: CLRegion) { switch (state) { case .inside: // すでに領域内にいる場合は(didEnterRegion)は呼ばれない trackLocationManager.startRangingBeacons(in: beaconRegion) // →(didRangeBeacons)で測定をはじめる break case .outside: // 領域外→領域に入った場合はdidEnterRegionが呼ばれる break case .unknown: // 不明→領域に入った場合はdidEnterRegionが呼ばれる break } } //領域に入った時 func locationManager(_ manager: CLLocationManager, didEnterRegion region: CLRegion) { // →(didRangeBeacons)で測定をはじめる self.trackLocationManager.startRangingBeacons(in: self.beaconRegion) status.text = "didEnterRegion" } //領域から出た時 func locationManager(_ manager: CLLocationManager, didExitRegion region: CLRegion) { //測定を停止する self.trackLocationManager.stopRangingBeacons(in: self.beaconRegion) status.text = "stop" } //観測失敗 func locationManager(_ manager: CLLocationManager, monitoringDidFailForRegion region: CLRegion) { status.text = "error" } //領域内にいるので測定をする func locationManager(_ manager: CLLocationManager, didRangeBeacons beacons: [CLBeacon], in region: CLBeaconRegion){ /* beaconから取得できるデータ proximityUUID : regionの識別子 major : 識別子1 minor : 識別子2 proximity : 相対距離 accuracy : 精度 rssi : 電波強度 */ } }
こちらのプログラムはhttps://qiita.com/nwatabou/items/be08d79341bb5721239fをもとにしました。
試したこと
メッセージの宣言の位置を変えたりしました。
補足情報(FW/ツールのバージョンなど)
Swift 5.0.1
10.2.1 (10E100)
iPhone5s 12.3.2
あなたの回答
tips
プレビュー