如何从自己的本机应用程序中启动Google Maps iPhone应用程序?


70

苹果开发者文档(链接现在是死的)解释说,如果你把在网页中的链接,然后单击它,而在iPhone上,也作为标准配置提供与iPhone将推出谷歌地图应用程序中使用移动Safari浏览器。

如何在我自己的本机iPhone应用程序(即不是通过Mobile Safari的网页)中使用特定地址启动相同的Google Maps应用程序,就像在“通讯录”中轻按地址即可启动地图一样?

注意:这仅适用于设备本身。不在模拟器中。


它可以在模拟器中运行,而只是在移动Safari中打开。
2012年

Answers:


65

对于iOS 5.1.1及更低版本,请使用的openURL方法UIApplication。它将执行普通的iPhone神奇URL重新解释。所以

[someUIApplication openURL:[NSURL URLWithString:@"http://maps.google.com/maps?q=London"]]

应该调用Google地图应用。

从iOS 6开始,您将调用Apple自己的Maps应用。为此,MKMapItem用您要显示的位置配置一个对象,然后向其发送openInMapsWithLaunchOptions消息。要从当前位置开始,请尝试:

[[MKMapItem mapItemForCurrentLocation] openInMapsWithLaunchOptions:nil];

为此,您需要针对MapKit进行链接(我相信它会提示您进行位置访问)。


2
带有参数说明的Wiki:mapki.com/wiki/Google_Map_Parameters Apple iphone os编程指南附录A在iphone上列出了支持的参数。
卡尔·科里耶尔·马丁

这是泄漏的-[[NSURL alloc] initWithString:]您不应该使用[NSURL URLWithString:]它,因为它提供了自动释放的对象。
蒂姆(Tim)

@Tim,固定-谢谢。公平地讲,这个答案何时发布并不重要,因为该应用程序会在通话结束后立即终止。
亚当·赖特

总是很重要!另外,someUIApplication也可以代替您提出[UIApplication sharedApplication](因为我不知道实际上不知道您会UIApplication做出什么其他情况)
Tim

2
根据Apple的文档(developer.apple.com/library/ios/#featuredarticles/…),您应该使用maps.apple.com,如下所示:maps.apple.com/?q=London 这样做可以避免放入其他代码自iOS 5起就取决于操作系统版本,它将重定向到Google Maps。
马特·詹姆斯

32

究竟。您需要实现的代码是这样的:

UIApplication *app = [UIApplication sharedApplication];
[app openURL:[NSURL URLWithString: @"http://maps.google.com/maps?q=London"]];

因为根据文档,除非您调用sharedApplication,否则UIApplication仅在应用程序委托中可用。


7
您正在泄漏NSURL。我建议:[app openURL:[NSURL URLWithString:@“ maps.google.com/maps?g=London”]], 以便将其自动发布。
马修·麦高根

29

要在特定坐标处打开Goog​​le地图,请尝试以下代码:

NSString *latlong = @"-56.568545,1.256281";
NSString *url = [NSString stringWithFormat: @"http://maps.google.com/maps?ll=%@",
[latlong stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:url]];

您可以使用CoreLocation中的当前位置替换latlong字符串。

您也可以使用(“ z”)标志指定缩放级别。值是1-19。这是一个例子:

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@“ http://maps.google.com/maps?z=8 ”]];


2
不知何故,它对于“ ll”来说无法正常工作,我必须改用“ q”。例如,maps.google.com / mapsq = 48.8588054,2.3030451maps.google.com/maps?ll=48.8588054,2.3030451指向的地址不同。
Enzo Tran


13

这是地图链接的Apple URL方案参考:https : //developer.apple.com/library/archive/featuredarticles/iPhoneURLScheme_Reference/MapLinks/MapLinks.html

创建有效地图链接的规则如下:

  • 域必须是google.com,子域必须是maps或ditu。
  • 如果查询包含site作为键,而local作为值,则路径必须为/,/ maps,/ local或/ m。
  • 路径不能为/ maps / *。
  • 必须支持所有参数。有关支持的参数列表,请参见表1。
  • 如果值是URL,则参数不能为q = *(因此不选择KML)。
  • 参数不能包含view = text或dirflg = r。

**有关支持的参数列表,请参见上面的链接。


9

如果您使用的是ios 10,请不要忘记在Info.plist中添加查询方案

<key>LSApplicationQueriesSchemes</key>
<array>
 <string>comgooglemaps</string>
</array>

如果您使用的是Objective-C

if ([[UIApplication sharedApplication] canOpenURL: [NSURL URLWithString:@"comgooglemaps:"]]) {
    NSString *urlString = [NSString stringWithFormat:@"comgooglemaps://?ll=%@,%@",destinationLatitude,destinationLongitude];
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:urlString]];
    } else { 
    NSString *string = [NSString stringWithFormat:@"http://maps.google.com/maps?ll=%@,%@",destinationLatitude,destinationLongitude];
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:string]];
    }

如果您使用的是Swift 2.2

if UIApplication.sharedApplication().canOpenURL(NSURL(string: "comgooglemaps:")!) {
    var urlString = "comgooglemaps://?ll=\(destinationLatitude),\(destinationLongitude)"
    UIApplication.sharedApplication().openURL(NSURL(string: urlString)!)
}
else {
    var string = "http://maps.google.com/maps?ll=\(destinationLatitude),\(destinationLongitude)"
    UIApplication.sharedApplication().openURL(NSURL(string: string)!)
}

如果您使用的是Swift 3.0

if UIApplication.shared.canOpenURL(URL(string: "comgooglemaps:")!) {
    var urlString = "comgooglemaps://?ll=\(destinationLatitude),\(destinationLongitude)"
    UIApplication.shared.openURL(URL(string: urlString)!)
}
else {
    var string = "http://maps.google.com/maps?ll=\(destinationLatitude),\(destinationLongitude)"
    UIApplication.shared.openURL(URL(string: string)!)
}

2

对于电话问题,您是否正在模拟器上进行测试?这仅适用于设备本身。

另外,openURL返回一个布尔值,您可以使用它检查运行的设备是否支持该功能。例如,您不能在iPod Touch上拨打电话:-)


2

只需调用此方法,然后将Google Maps URL Scheme添加到您的.plist文件中即可与此Answer相同。

斯威夫特4:-

func openMapApp(latitude:String, longitude:String, address:String) {

    var myAddress:String = address

    //For Apple Maps
    let testURL2 = URL.init(string: "http://maps.apple.com/")

    //For Google Maps
    let testURL = URL.init(string: "comgooglemaps-x-callback://")

    //For Google Maps
    if UIApplication.shared.canOpenURL(testURL!) {
        var direction:String = ""
        myAddress = myAddress.replacingOccurrences(of: " ", with: "+")

        direction = String(format: "comgooglemaps-x-callback://?daddr=%@,%@&x-success=sourceapp://?resume=true&x-source=AirApp", latitude, longitude)

        let directionsURL = URL.init(string: direction)
        if #available(iOS 10, *) {
            UIApplication.shared.open(directionsURL!)
        } else {
            UIApplication.shared.openURL(directionsURL!)
        }
    }
    //For Apple Maps
    else if UIApplication.shared.canOpenURL(testURL2!) {
        var direction:String = ""
        myAddress = myAddress.replacingOccurrences(of: " ", with: "+")

        var CurrentLocationLatitude:String = ""
        var CurrentLocationLongitude:String = ""

        if let latitude = USERDEFAULT.value(forKey: "CurrentLocationLatitude") as? Double {
            CurrentLocationLatitude = "\(latitude)"
            //print(myLatitude)
        }

        if let longitude = USERDEFAULT.value(forKey: "CurrentLocationLongitude") as? Double {
            CurrentLocationLongitude = "\(longitude)"
            //print(myLongitude)
        }

        direction = String(format: "http://maps.apple.com/?saddr=%@,%@&daddr=%@,%@", CurrentLocationLatitude, CurrentLocationLongitude, latitude, longitude)

        let directionsURL = URL.init(string: direction)
        if #available(iOS 10, *) {
            UIApplication.shared.open(directionsURL!)
        } else {
            UIApplication.shared.openURL(directionsURL!)
        }

    }
    //For SAFARI Browser
    else {
        var direction:String = ""
        direction = String(format: "http://maps.google.com/maps?q=%@,%@", latitude, longitude)
        direction = direction.replacingOccurrences(of: " ", with: "+")

        let directionsURL = URL.init(string: direction)
        if #available(iOS 10, *) {
            UIApplication.shared.open(directionsURL!)
        } else {
            UIApplication.shared.openURL(directionsURL!)
        }
    }
}

希望,这就是您想要的。如有任何疑问,请联系我。:)


这是行不通的。我告诉情况。在按钮上单击,我用saddr和daddr传递URL并调用UIApplication.shared.canOpenURL(unwrappedURL)。任何帮助
iSrinivasan27 '18

在模拟器中,您没有Google Maps应用程序。因此,您的else条件将被执行。然后在SAFARI浏览器中打开URL。请在设备上卸载Google Maps应用程序,然后进行检查。它将与模拟器相同。
与Doshi见面

谢谢,有人提出了这个问题。我如何检查iPhone是否已安装Gmap
iSrinivasan27 '18

看来您还没有使用过iPhone。只需打开Appstore,搜索Google Maps。并检查是否有安装选项或打开应用程序选项。另一种选择是,通过在iPhone主屏幕中按下手势直接在打开状态下搜索Google Maps应用。
与Doshi

是的,我不是更好的android用户。我认为我没有适当地提出问题。如何通过代码检查iPhone中是否安装了Google Map App?打开它或重定向到应用程序商店使用
iSrinivasan27 '18



1

要移动到Google地图,请使用此API并发送目标纬度和经度

NSString* addr = nil;
     addr = [NSString stringWithFormat:@"http://maps.google.com/maps?daddr=%1.6f,%1.6f&saddr=Posizione attuale", destinationLat,destinationLong];

NSURL* url = [[NSURL alloc] initWithString:[addr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
[[UIApplication sharedApplication] openURL:url];


0

如果您需要的灵活性超出了Google URL格式所提供的灵活性,或者您想在应用程序中嵌入地图而不是启动地图应用程序,请举一个例子

它甚至会为您提供执行所有嵌入的源代码。


0

iPhone4 iOS 6.0.1(10A523)

适用于Safari和Chrome。两种最新版本都到现在为止(2013年6月10日)。

下面的URL方案也可以使用。但是在Chrome仅能在页面内部运行的情况下,则无法通过地址栏访问该页面。

地图:q = GivenTitle @ latitude,longtitude


0
**Getting Directions between 2 locations**

        NSString *googleMapUrlString = [NSString stringWithFormat:@"http://maps.google.com/?saddr=%@,%@&daddr=%@,%@", @"30.7046", @"76.7179", @"30.4414", @"76.1617"];
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:googleMapUrlString]];

0

与Swift 4一样的工作代码:

步骤1-将以下内容添加到info.plist

<key>LSApplicationQueriesSchemes</key>
<array>
<string>googlechromes</string>
<string>comgooglemaps</string>
</array>

第2步-使用以下代码显示Google地图

    let destinationLatitude = "40.7128"
    let destinationLongitude = "74.0060"

    if UIApplication.shared.canOpenURL(URL(string: "comgooglemaps:")!) {
        if let url = URL(string: "comgooglemaps://?ll=\(destinationLatitude),\(destinationLongitude)"), !url.absoluteString.isEmpty {
            UIApplication.shared.open(url, options: [:], completionHandler: nil)
        }
    }else{
        if let url = URL(string: "http://maps.google.com/maps?ll=\(destinationLatitude),\(destinationLongitude)"), !url.absoluteString.isEmpty {
            UIApplication.shared.open(url, options: [:], completionHandler: nil)
        }
    }
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.