У меня есть код приложения, который позволяет обновлять местоположение в фоновом режиме
locationManager.requestAlwaysAuthorization()
locationManager.delegate = self
locationManager.desiredAccuracy = kCLLocationAccuracyHundredMeters // less batery ussage
locationManager.pausesLocationUpdatesAutomatically = false
locationManager.allowsBackgroundLocationUpdates = true
И я хочу запускать локальные уведомления в зависимости от географического местоположения пользователя.
notificationCenter.requestAuthorization(options: [.alert, .badge, .sound]) { [weak self] (granted, error) in
guard let self = self else { return }
if granted {
print("NotificationCenter Authorization Granted!")
self.notificationCenter.removePendingNotificationRequests(withIdentifiers: [model.id])
let content = UNMutableNotificationContent()
content.title = model.name
content.body = model.desc
content.categoryIdentifier = "Location Notification"
content.userInfo["model_id"] = model.id
content.sound = UNNotificationSound.default
let region = self.makeRegion(for: model)
let trigger = UNLocationNotificationTrigger(region: region, repeats: true)
let request = UNNotificationRequest(identifier: restaurant.id, content: content, trigger: trigger)
self.notificationCenter.add(request)
}
}
locationManager.startUpdatingLocation()
Теперь у меня есть синий индикатор строки состояния об обновлениях местоположения все время, пока приложение находится на переднем плане или в фоне. Я думаю, что это должно быть навязчиво, чтобы конечный пользователь появлялся все время.
Я слышал, что это будет отображаться во время предоставления прав пользователя в состоянии использования авторизации для основного местоположения. Поэтому, насколько я понимаю, я должен разрешать запуск этого уведомления только тогда, когда приложение находится на переднем плане (но какие изменения здесь необходимы? allowsBackgroundLocationUpdates = false
?)
И использовать фоновые обновления местоположения пользователя только тогда, когда пользователь предоставил статус «Всегда авторизация».
Но странным является то, что этот индикатор синей барды также появляется, когда приложение находится на переднем плане.
ОБНОВЛЕНИЕ
ОК У меня задан вопрос «В следующий раз», всегда отображается синий индикатор.
Если есть Во время использования, синий индикатор находится только в фоновом режиме.
Здесь всегда есть синий индикатор.
Я думаю добавить такой метод делегата
func locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) {
print("Core Location authorization status: \(status)")
switch status {
case .authorizedAlways:
locationManager.allowsBackgroundLocationUpdates = true
default:
locationManager.allowsBackgroundLocationUpdates = false
}
}
Я думаю, что это должно решить синий индикатор навязчивое отображение в строке состояния. И единственная проблема будет в том, что если пользователь в iOS 13 выберет «Пока используется», то не будет попытки обновить местоположение в фоновом режиме, поэтому в конце не будет случая отображать предупреждение с вопросом о Всегда Авторизации, и толькоБудет ли возможность пользователю вручную включить Всегда в настройках?
Итак, мой вопрос здесь заключается в том, как сделать так, чтобы в iOS 13 появилось предупреждение с вопросом о Always Authorization, и только после этого измените
.allowsBackgroundLocationUpdates = true
на
.allowsBackgroundLocationUpdates = false