Waze не загружает навигацию из Swift

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

Вот код:

@IBAction func openWazeAction(_ sender: Any) {
    // open waze
    if UIApplication.shared.canOpenURL(URL(string: "waze://")!) {
        let urlStr = String(format: "waze://ul?ll=%f,%f&navigate=yes", (selectedBorne?.location?.x)!, (selectedBorne?.location?.y)!)

        print(urlStr)

        UIApplication.shared.open(URL(string: urlStr)!)
    } else {
        UIApplication.shared.open(URL(string: "http://itunes.apple.com/us/app/id323229106")!)
    }
}

print(urlStr) возвращает правильный URL: waze://ul?ll=48.792914,2.366290&navigate=yes, но в приложении Waze ничего не происходит.

(я поместил LSApplicationQueriesSchemes в файл Info.plist.)

Что здесь не так?


person cusmar    schedule 07.02.2018    source источник
comment
Это работает с let urlString = https://waze.com:/ul?ll=48.792914,2.366290&navigate=yes Что-то происходит? Источник: developers.google.com/waze/deeplinks.   -  person kuzdu    schedule 07.02.2018
comment
Он открывает представление Safari, я думаю, что они допустили ошибку в своей документации по этому поводу, потому что нелогично проверять, существует ли waze://, а затем открывать URL-адрес https://.   -  person cusmar    schedule 07.02.2018


Ответы (2)


Я исправил проблему. документация Waze дает неверную информацию, поскольку их пример iOS не открывает Waze Приложение как должно быть. Он открывает Safari на мобильном устройстве, а затем нам нужно щелкнуть ссылку, чтобы открыть Waze.

Правильная ссылка:

waze://?ll={latitude},{longitude}&navigate=yes

Мне нужно было удалить ul в URL.


Быстрый

func navigateTo(latitude: Double, longitude: Double) {
    if UIApplication.shared.canOpenURL(URL(string: "waze://")!) {
        // Waze is installed. Launch Waze and start navigation
        let urlStr = String(format: "waze://?ll=%f,%f&navigate=yes", latitude, longitude)
        UIApplication.shared.open(URL(string: urlStr)!)
    } else {
        // Waze is not installed. Launch AppStore to install Waze app
        UIApplication.shared.open(URL(string: "http://itunes.apple.com/us/app/id323229106")!)
    }
}

Цель-C

(void) navigateToLatitude:(double)latitude longitude:(double)longitude
{
  if ([[UIApplication sharedApplication]
    canOpenURL:[NSURL URLWithString:@"waze://"]]) {
      // Waze is installed. Launch Waze and start navigation
      NSString *urlStr =
        [NSString stringWithFormat:@"waze://?ll=%f,%f&navigate=yes",
        latitude, longitude];
      [[UIApplication sharedApplication] openURL:[NSURL URLWithString:urlStr]];
  } else {
    // Waze is not installed. Launch AppStore to install Waze app
    [[UIApplication sharedApplication] openURL:[NSURL
      URLWithString:@"http://itunes.apple.com/us/app/id323229106"]];
  }
}
person cusmar    schedule 09.02.2018
comment
Это здорово, но что, если я хочу перемещаться по поисковому запросу, а не по долготе/широте? - person Gal; 26.02.2018
comment
Вы должны закодировать свой поисковый запрос (например, здесь), а затем передать его в своем URL-адресе: waze://?q= ваш поисковый запрос. - person cusmar; 26.02.2018
comment
При попытке "waze://?q=19+Hatzfira+st,+Jerusalem,+Israel" открывается Waze, но без навигации. - person Gal; 26.02.2018
comment
Вы должны преобразовать поисковый запрос в широту и долготу, используя GeoCode. - person cusmar; 26.02.2018
comment
Вы можете попробовать это: query = 'gas station Israel' waze://?q=query это работает для меня, и если у пользователя нет waze на устройстве, вы можете открыть его в браузере следующим образом: https://waze.com/ul?q=${query} - person Idan; 23.04.2019

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

let urlStr = String(format: "waze://?ll=%f,%f&navigate=yes", latitude, longitude)
UIApplication.shared.open(URL(string: urlStr)!) { didOpen in
        
        if !didOpen {
            UIApplication.shared.open(URL(string: "http://itunes.apple.com/us/app/id323229106")!)
        }
    }
person Mario Jaramillo    schedule 28.11.2020