gpt4 book ai didi

ios - 地理围栏警报/本地通知在触发时不会唤醒锁定的手机

转载 作者:可可西里 更新时间:2023-11-01 02:05:05 27 4
gpt4 key购买 nike

我正在制作一个使用圆形区域作为地理围栏的应用程序。当手机处于事件状态或应用程序打开时,地理围栏通知在模拟器和设备(运行 10.3.1 的 iPhone 6)中都可以正常工作。

在模拟器中运行良好;当用户进入某个区域时,它会唤醒、发出声音并在锁定屏幕上显示警报。

在手机上,“didEnterRegion”代理调用在进入区域时进行(我记录了一些消息)但手机没有发出警报和唤醒。当我按下主页按钮一次时,我可以在锁定屏幕上看到警报,但我希望它能立即唤醒并显示警报——就像我收到消息时一样。它在模拟器中工作,所以我想知道可能出了什么问题?它对我有用过几次,警报同时显示在手机和 watch 上,但 95% 的时间它不起作用 - 通知已生成,但只有在我手动唤醒手机时才可见。

如何解决这个问题?

这是我用来创建本地通知的代码:

        // https://blog.codecentric.de/en/2016/11/setup-ios-10-local-notification/


let location = CLLocation(latitude: item.coordinate.latitude, longitude: item.coordinate.longitude)
GeoTools.decodePosition(location: location) {
(address, city) in
let content = UNMutableNotificationContent()
content.title = "Camera nearby!"
content.subtitle = item.id
content.body = "\(address), \(city)"
content.categoryIdentifier = Constants.notificationCategoryId
content.sound = UNNotificationSound.default()
content.threadIdentifier = item.id

// FIXME make action for clicking notification

let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 0.001, repeats: false) // FIXME HACK

let request = UNNotificationRequest(identifier: "camNotification", content: content, trigger: trigger)

let unc = UNUserNotificationCenter.current()
unc.removeAllPendingNotificationRequests()
unc.add(request, withCompletionHandler: { (error) in
if let error = error {
print(error)
}
else {
print("completed")
}

})

}

最佳答案

这是我刚刚验证的一些代码,可在出现通知时唤醒设备:

let message = "CLRegion event"
// Show an alert if application is active:
if UIApplication.shared.applicationState == .active {
if let viewController = UIApplication.shared.keyWindow?.rootViewController {
showSimpleAlertWithTitle(nil, message: message, viewController: viewController)
}
}
else {
// Otherwise app is in background, present a local notification:
let content = UNMutableNotificationContent()
content.body = message
content.sound = UNNotificationSound.default()
content.categoryIdentifier = "message"

let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 1.0, repeats: false)
let request = UNNotificationRequest(identifier: "com.foobar", content: content, trigger: trigger)
UNUserNotificationCenter.current().add(request, withCompletionHandler: nil)
}

真正唯一的区别是我不调用 removeAllPendingNotifications() 所以如果你必须删除通知我想知道 removePendingNotificationRequests(withIdentifiers identifiers: [String]) 是否可能更精确?

关于ios - 地理围栏警报/本地通知在触发时不会唤醒锁定的手机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43553956/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com