У меня возникла проблема при запросе разрешений на доступ от пользователя, когда я использую iOS11, мой info.plist содержит
<key>NSLocationWhenInUseUsageDescription</key>
<string>When in use permissions</string>
<key>NSLocationAlwaysUsageDescription</key>
<string>always permissions</string>
<key>NSLocationAlwaysAndWhenInUsageDescription</key>
<string>Always and in usage permissions</string>
У меня есть две карты для клиента, а другая для сотрудников. Для сотрудников мне нужно знать их местоположение, даже если приложение не работает или не зашифровано (они могут отключить его при выходе) и запросить разрешение, используя
locationManager.requestAlwaysAuthorization()
Для клиента мне нужны только местоположения, пока приложение используется, и запрашивайте разрешение, используя
locationManager.requestWhenInUseAuthorization()
В iOS 11 это запрашивает разрешение только при использовании и никогда не разрешается всегда.
В iOS 10 он имеет правильное поведение.
Поведение, которое я хочу, выглядит следующим образом: Когда они являются клиентом (не подписываются), он запрашивает только при использовании разрешения. Если они подписывают (сотрудник), он запрашивает местоположение, даже если он не используется.
Если кто-то может пролить свет на то, что я пропустил/сделал неправильно, это было бы очень признательно.
Что-то примечание, если я удалю разрешение NSLocationAlwaysUsageDescription
iOS10 и iOS11 имеют ту же проблему, что и не запрашивать всегда разрешение.
Немного больше разъяснений.
Я реализовал функцию делегирования didChangeAuthorization, и он вызывается, когда пользователи разрешают разрешение извещения называть requestWhenInUseAuthorization()
однако, когда я вызываю функцию requestWhenInUseAuthorization()
в диспетчере местоположений, метод делегата не вызывается, это похоже на то, что он никогда не получает этот вызов, и пользователю не отображается диалоговое окно предупреждения.