实现以下目标的正确URL格式是什么:
什么不起作用:
let encoded = "https://www.google.com/maps/dir/?api=1&destination=-20.021999%2C57.579075"
let url = URL(string: encoded)!
UIApplication.shared.open(url, options: [:], completionHandler: nil)
此外,我尝试使用addingPercentEncoding
方法对URL进行编码:
let string = "https://www.google.com/maps/dir/?api=1&destination=\(lat),\(long)"
let encoded = string.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)!
let url = URL(string: encoded)!
UIApplication.shared.open(url, options: [:], completionHandler: nil)
两种情况下的结果相同: “不支持的链接-Google Maps无法打开此链接”
另一方面,如果我删除Google Maps应用程序,或在模拟器中尝试相同的代码,则一切正常,并且可以完全达到我想要的结果:
为什么相同的链接可以成功启动“ Web”应用程序,但是无法被本机应用程序识别?
有问题的字符串:
https://www.google.com/maps/dir/?api=1&destination=-20.021999,57.579075
我要遵循的指南:Google Maps Guide
答案 0 :(得分:1)
我刚刚尝试了第二种方法(使用addingPercentEncoding(withAllowedCharacters:)
,并提供了给定的坐标,并且在Google Maps应用中出现了完全相同的错误。
但是后来我将坐标更改为我所在的城市和瞧!有效。鉴于(-20.021999,57.579075)对,似乎Google地图根本无法生成方向。从您的第二个屏幕截图来看(提供的是网络版本–空白,没有提供地图),我认为它也在努力为您的案例生成方向。为什么它会告诉我这种情况下不支持该链接,但这使我感到困惑。
这是完整的代码(我创建了一个空白的单视图应用程序):
import UIKit
class ViewController: UIViewController {
override func loadView() {
super.loadView()
let lat = 51.150992
let long = 71.426444
let string = "https://www.google.com/maps/dir/?api=1&destination=\(lat),\(long)"
let encoded = string.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)!
let url = URL(string: encoded)!
UIApplication.shared.open(url)
}
}