Тестирование служб определения местоположения на устройстве iOS

Я создаю приложение, в котором будут перечислены ближайшие дилеры к текущему местоположению пользователя.

При тестировании на моем устройстве iPhone 6 и iPhone 4S я вижу, что у моего приложения нет разрешения на получение местоположения, но когда я захожу в настройки, я не вижу своего тестового приложения в списке, чтобы предоставить ему это разрешение.

Это связано с тем, как приложение устанавливается при «Запуске» через Appcelerator Studio? Как я могу предоставить разрешение на тестовое приложение, пожалуйста?

Мой код:

function getCurrentPhoneLocation(callback)
{
    Titanium.API.info("get phone location " + Ti.Geolocation.locationServicesEnabled);
    if(Ti.Geolocation.locationServicesEnabled)
    {
        Titanium.API.info("GPS permissions: " + Ti.Geolocation.locationServicesAuthorization + " (" + Ti.Geolocation.AUTHORIZATION_ALWAYS + " | " + Ti.Geolocation.AUTHORIZATION_AUTHORIZED + " | " + Ti.Geolocation.AUTHORIZATION_WHEN_IN_USE +  ")");
        if (Ti.Geolocation.locationServicesAuthorization == Ti.Geolocation.AUTHORIZATION_ALWAYS || Ti.Geolocation.locationServicesAuthorization == Ti.Geolocation.AUTHORIZATION_AUTHORIZED || Ti.Geolocation.locationServicesAuthorization == Ti.Geolocation.AUTHORIZATION_WHEN_IN_USE)
        {
              Titanium.API.info("Got permissions - lets go!");

              Ti.Geolocation.purpose = 'Get current location';        

              var currentPhoneLocation = {};

              Ti.Geolocation.getCurrentPosition(function(e){
                  Titanium.API.info("from pos: " + JSON.stringify(e));
                  if(e.success === false) {
                      Ti.API.error('Error:' + e.error);
                      alert("Location is currently unavailable");
                      callback( false );
                  } else {

                      currentPhoneLocation.longitude = e.coords.longitude;
                      currentPhoneLocation.latitude = e.coords.latitude;
                      Ti.API.info("Returned Cords: " + JSON.stringify(currentPhoneLocation));
                      callback(); 
                  }               
              });             
        } 
        else
        {
              Titanium.API.info("No APP permission");
              Titanium.UI.createAlertDialog({title:'Location Service', message:'Please grant this app permission to get your location.'}).show();
              callback( false );
        }
    }
    else
    {
          Titanium.API.info("No GPS available");
          Titanium.UI.createAlertDialog({title:'Location Service', message:'Please turn on your location services.'}).show();
          callback( false );
    }
}

Вы можете видеть, что мой код трассировки показывает, что Ti.Geolocation.locationServicesAuthorization возвращает «0».

[INFO] :   get phone location true
[INFO] :   GPS permissions: 0 (3 | 3 | 4)
[INFO] :   No APP permission
[INFO] :   Recieved location: false

person Tomtids    schedule 28.01.2016    source источник


Ответы (1)


Независимо от того, как вы его устанавливаете, настройки работают одинаково. Вам все равно придется его авторизовать.

Однако в последнем выпуске многое изменилось для разрешений, и я рекомендую ознакомиться с документацией, чтобы настроить его правильно. Вы можете найти пример приложения на Гитхаб

Лучший способ проверить, был ли он предоставлен, через:

Ti.Geolocation.hasLocationPermissions(Ti.Geolocation.AUTHORIZATION_ALWAYS);

Кроме того, я рекомендую получить местоположение. Ложь на самом деле предоставлена ​​вами. Если вы предоставили разрешения приложению (проверено в настройках), это должно работать

Ti.GeoLocation.getCurrentPosition(callback(e){})
person Rene Pot    schedule 28.01.2016
comment
Спасибо, Рене. Эта ссылка на Github дала мне код запроса, который мне пока не удалось найти. - person Tomtids; 28.01.2016