Swift:未安装 Google Maps 时,应用程序需要打开 Apple Maps
Posted
技术标签:
【中文标题】Swift:未安装 Google Maps 时,应用程序需要打开 Apple Maps【英文标题】:Swift: App needs to open Apple Maps when Google Maps not installed 【发布时间】:2017-02-16 16:10:51 【问题描述】:我为哥本哈根骑自行车的人构建了一个应用程序,但遇到了一些问题。 当手机上没有谷歌地图时,应用需要打开苹果地图。
代码如下所示
// OUTLETS!
@IBOutlet weak var googleMapsView: GMSMapView!
// VARIABLES!
var locationManager = CLLocationManager()
var M1: GMSMarker!
var M2: GMSMarker!
//Marker funtioncs
var markerFunctions: [GMSMarker: (() -> Void)]!
override func viewDidLoad()
super.viewDidLoad()
// GET LOCATION WHILE USING APP
locationManager = CLLocationManager()
locationManager.delegate = self
locationManager.requestWhenInUseAuthorization()
locationManager.startUpdatingLocation()
locationManager.startMonitoringSignificantLocationChanges()
initGoogleMaps()
// START GOOGLE MAPS!
func initGoogleMaps()
// MARKERS
M1 = GMSMarker()
M1.position = CLLocationCoordinate2D(latitude: 55.65208178045790, longitude: 12.527047696518300)
M1.title = "Sjælør St."
M1.snippet = "Press for navigation"
M1.map = self.googleMapsView
M2 = GMSMarker()
M2.position = CLLocationCoordinate2D(latitude: 55.67530850095370, longitude: 12.583165039072400)
M2.title = "Børsen (Slotsholmsgade)"
M2.snippet = "Press for navigation"
M2.map = self.googleMapsView
// Marker functions
markerFunctions = [
M1: UIApplication.shared.open(NSURL(string: "comgooglemaps-x-callback://" +
"?daddr=55.65208178045790,12.527047696518300&directionsmode=bicycling&zoom=17")! as URL),
M2: UIApplication.shared.open(NSURL(string: "comgooglemaps-x-callback://" +
"?daddr=55.67530850095370,12.583165039072400&directionsmode=bicycling&zoom=17")! as URL),
点击信息窗口时,需要显示谷歌地图的导航(有效)。但是,如果 Google Maps 应用程序不可用,我该如何重新编写“标记功能”以便它可以在 Apple Maps 中打开?
【问题讨论】:
developer.apple.com/library/prerelease/content/featuredarticles/… ?检查“canOpenURL()”以了解哪个可用。 【参考方案1】:为此,您需要检查是否安装了 Google 地图。这可以很容易地完成:
func openMaps(latitude: CLLocationDegrees, longitude: CLLocationDegrees)
let googleMapsInstalled = UIApplication.shared.canOpenURL(URL(string: "comgooglemaps://")!)
if googleMapsInstalled
UIApplication.shared.open(URL(string: "comgooglemaps-x-callback://" +
"?daddr=\(latitude),\(longitude)&directionsmode=bicycling&zoom=17")!)
else
let coordinates = CLLocationCoordinate2DMake(latitude, longitude)
let placemark = MKPlacemark(coordinate: coordinates, addressDictionary: nil)
let mapItem = MKMapItem(placemark: placemark)
mapItem.openInMaps(launchOptions: nil)
默认情况下,出于隐私原因,ios 不允许检查 URL 是否可以打开。您需要在您的应用程序中将检查 comgooglemaps://
列入白名单。为此,请将其添加到您的应用中 Info.plist
:
<key>LSApplicationQueriesSchemes</key>
<array>
<string>comgooglemaps</string>
</array>
如果您已正确执行此操作,openMaps(latitude:, logitude:)
将打开 Google 地图(如果已安装),否则将打开 Apple 地图。只需更改您的闭包(“标记函数”)即可调用新方法。
当然,您还需要import MapKit
才能使用。
【讨论】:
@nagleer 非常感谢您的快速回复。我看过它,但它不起作用,因为我需要该功能才能为多个 InfoWindows 工作。例如,如果您选择 InfoWindow#1,则指向 XXXX,但如果您选择 InfoWindow#2,则指向 YYYY。您知道如何编写代码以适用于不同的 InfoWindow 选项卡吗? 您是否尝试阅读并理解我的功能?它已经这样做了。它需要坐标并显示您给它的任何位置。此外,您在问题中没有提及InfoWindow
,也没有提及InfoWindow
s 是什么。根据现有信息,我无法再为您提供任何帮助。您将需要澄清您正在尝试做什么。另外,请再次检查我的示例,因为我怀疑它已经完成了您希望它执行的操作。以上是关于Swift:未安装 Google Maps 时,应用程序需要打开 Apple Maps的主要内容,如果未能解决你的问题,请参考以下文章
Google Maps v2 - 应用程序未安装在 2.3 设备上
iOS 单元测试在 CocoaPods Google Maps SDK 上失败
在“src”上使用 javascript 变量时未加载 Google Maps iFrame
“未处理的异常:NoSuchMethodError:在 null 上调用了 getter 'iterator'。”当我在颤振中使用 google_maps_polyline 插件时抛出