Проблема с разрешением Ionic Geolocation на iOS

У меня возникла проблема с плагином GeoLocation в ionic3.

Я добавил все импортные вещи. Часть <edit-config> тоже. Я вижу это в моем файле plist:

<key>NSLocationWhenInUseUsageDescription</key>
<string>Get Position</string>
<key>NSLocationAlwaysUsageDescription</key>
<string>Get position</string>

Так что я думаю, что это работает. Но это не так; это работает для Android, но не для iOS. Я вызываю этот метод:

this.geolocation.getCurrentPosition().then((resp) => {
    alert("geo " + resp.coords.latitude);
    // resp.coords.latitude
    // resp.coords.longitude
   }).catch((error) => {
     alert(error.code);
     alert(error.message);
   });

Я получил Error.code 2 и Error.message: «Происхождение не имеет разрешения на использование службы геолокации».

Что я должен делать?


person Torben G    schedule 08.08.2018    source источник


Ответы (2)


У меня была именно эта проблема - мне пришлось вручную добавить этот параметр конфиденциальности в файл *.plist в самом XCode (найденный в resources/).

Под Key вы вводите Privacy - Location When In Use Usage Description или, по крайней мере, начинаете вводить его, и оно будет автоматически заполнено. Type должно быть String, а Value должно быть сообщением, которое вы хотите показать пользователю, объясняя, почему вам нужен доступ к данным о местоположении.

person Eli Cohn    schedule 08.08.2018
comment
Хорошо, это работает. Опять таки. Но с функцией setTimeout. Возможно ли, что мой код работает быстрее, чем готов GPS? - person Torben G; 09.08.2018
comment
У вас есть что-то подобное, когда вы пытаетесь получить местоположение? this.geolocation.getCurrentPosition().then((pos) => { this.latitude = pos.coords.latitude; this.longitude = pos.coords.longitude; console.log('Successfully got location'); }).catch((error) => { console.log('Error getting location', error); }); - person Eli Cohn; 09.08.2018
comment
Да, и я получаю ошибку. Когда я устанавливаю тайм-аут, он работает, и отображаются значения. - person Torben G; 09.08.2018
comment
Может попробовать удалить и прочитать платформу? forum.ionicframework. ком/т/ - person Eli Cohn; 09.08.2018
comment
Но теперь это работает. Я добавил ключ конфиденциальности, как вы сказали, и он работает :) Iphone запрашивает разрешение на геолокацию. Но если я запущу функцию без тайм-аута, она выдаст мне ошибку. Но если я оберну setTimeout, я получу свои значения долготы и широты. - person Torben G; 10.08.2018
comment
Вы не должны вручную редактировать настройки в Xcode. Он будет удален при повторном добавлении платформы. Это неправильный ответ. - person Sinan Samet; 06.08.2020

У меня такая же проблема. Я использовал Ionic v4 с React, Cordova v9, cordova-ios v4.5.5. Проблема в моем случае возникла из-за того, что я не внедрил сценарий Cordova JS в веб-просмотр. Чтобы исправить это, я добавил следующий скрипт Bash в Cordova перед хуком подготовки ((cordova root)/hooks/before_prepare/inject_cordova.js):

#!/bin/bash
set -e
sed -E -i "" -e "s_(<head[^>]*>)_\1<script src=\"cordova.js\"></script>_" www/index.html

Где www/index.html — это путь к основному файлу HTML вашего приложения относительно корня проекта Cordova.

Последняя строка добавляет тег <script src="cordova.js"></script> в конец HTML-файла при запуске cordova prepare ios. В результате веб-просмотр начинает загружать сценарии Cordova, включая плагин геолокации, и приложение начинает запрашивать разрешение на использование геолокации.

person Finesse    schedule 18.10.2019