Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/103.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何防止触发多个位置通知_Ios_Swift_Xcode_Push Notification_Geofencing - Fatal编程技术网

Ios 如何防止触发多个位置通知

Ios 如何防止触发多个位置通知,ios,swift,xcode,push-notification,geofencing,Ios,Swift,Xcode,Push Notification,Geofencing,我注册了多个位置通知,它们经常相互重叠。我想限制每天一次触发通知,但问题是,当应用程序被终止时,我无法取消所有挂起的通知,只能在触发BGAppRefreshTaskRequest时执行(这在大多数情况下并不常见)。最糟糕的是,如果用户位于重叠区域,他将同时收到多个推送通知 注册通知的代码: let content = UNMutableNotificationContent() content.title = "Title" content.body = "Body" content.sound

我注册了多个位置通知,它们经常相互重叠。我想限制每天一次触发通知,但问题是,当应用程序被终止时,我无法取消所有挂起的通知,只能在触发BGAppRefreshTaskRequest时执行(这在大多数情况下并不常见)。最糟糕的是,如果用户位于重叠区域,他将同时收到多个推送通知

注册通知的代码:

let content = UNMutableNotificationContent()
content.title = "Title"
content.body = "Body"
content.sound = .default
content.userInfo = ["locationNotificationId" : id]
content.categoryIdentifier = "geofenceNotifications"

let region = CLCircularRegion(center: location,
                              radius: CLLocationDistance(range),
                              identifier: id)
region.notifyOnEntry = true
region.notifyOnExit = false
let trigger = UNLocationNotificationTrigger(region: region, repeats: false)

let request = UNNotificationRequest(identifier: id,
                                    content: content,
                                    trigger: trigger)

UNUserNotificationCenter.current().add(request, withCompletionHandler: { error in
    if let error = error {
        print(error)
    }
})

如果应用程序在后台或被杀死,我该如何防止在一个被触发后触发其他通知?

好的,所以我通过监视区域本身而不是使用本地推送通知和UNLocationNotificationTrigger来解决问题。缺点是——我需要请求后台的位置访问,而不是“使用时”,我被限制在20个区域内,但这仍然比不受控制的推送通知流要好


要了解有关区域监视的更多信息:

您可以通过以下方式取消通知:在计划之前删除所有挂起的NotificationRequests()或删除所有DeliveredNotifications()。检查是否有任何可用的挂起通知,然后不计划其他通知one@lali我可以使用removeAllPendingNotificationRequests删除它,但前提是它位于前台,否则我就没办法叫这个了function@SPatel问题不在于调度本身,问题在于如果应用程序在后台或被杀死,在一个被触发后无法删除所有调度的应用程序。但为什么要调度其他应用程序呢