iOS:通知和iBeacon

iOS:通知和iBeacon,ios,notifications,core-location,ibeacon,Ios,Notifications,Core Location,Ibeacon,我有一个应用程序,当用户超出iBeacon范围时需要发送通知。问题是,用户随机成为通知:有时有效,有时无效。 我的代码: // this function I call in viewDidLoad for my UIViewController func startMonitorig() { let beaconRegion:CLBeaconRegion = { let r = CLBeaconRegion(proximityUUID: UUID(uuidString

我有一个应用程序,当用户超出iBeacon范围时需要发送通知。问题是,用户随机成为通知:有时有效,有时无效。 我的代码:

// this function I call in viewDidLoad for my UIViewController

func startMonitorig() {
    let beaconRegion:CLBeaconRegion = {
        let r = CLBeaconRegion(proximityUUID: UUID(uuidString: "XXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX")!, major: 1, minor: 6, identifier: "com.myapp.identifier")
        return r
    }()
    locationManager.startMonitoring(for: beaconRegion)
    locationManager.startRangingBeacons(in: beaconRegion)
}


override func viewDidLoad() {
     super.viewDidLoad()
     locationManager.delegate = self
     locationManager.requestAlwaysAuthorization()
     startMonitorig()

}
AppDelegate:

let locationManager = CLLocationManager()

var window: UIWindow?

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    // Request permission to send notifications
    let center = UNUserNotificationCenter.current()
    center.requestAuthorization(options:[.alert, .sound]) { (granted, error) in }
    locationManager.delegate = self

    return true
}   

extension AppDelegate: CLLocationManagerDelegate {
func locationManager(_ manager: CLLocationManager, didExitRegion region: CLRegion) {
    guard region is CLBeaconRegion else { return }

    let content = UNMutableNotificationContent()
    content.title = "Forget Me Not"
    content.body = "Are you forgetting something?"
    content.sound = .default()

    let request = UNNotificationRequest(identifier: "ForgetMeNot", content: content, trigger: nil)
    UNUserNotificationCenter.current().removeAllPendingNotificationRequests()
    UNUserNotificationCenter.current().add(request, withCompletionHandler: nil)
}
}

我很好奇为什么会这样,我做错了什么?原因可能是什么?

只有在(1)检测到匹配的信标(2)30秒到15分钟后没有后续检测时,区域才会退出火灾。你确定你满足这些条件吗?你怎么知道的?您要等多久?@davidgyoung是,(1)是(我有输出。它向我显示有关已连接iBeacon的信息。)。(2) 也许我等得不够。。。我对本地通知不太熟悉。感谢您的回复只有当(1)检测到匹配的信标时(2)30秒到15分钟后没有后续检测时,区域才会退出火灾。你确定你满足这些条件吗?你怎么知道的?您要等多久?@davidgyoung是,(1)是(我有输出。它向我显示有关已连接iBeacon的信息。)。(2) 也许我等得不够。。。我对本地通知不太熟悉。谢谢你的回复