Wie kann ich die Google Maps iPhone-Anwendung in meiner eigenen nativen Anwendung starten?


70

In der Apple Developer Documentation (Link ist jetzt tot) wird erläutert, dass die Google Maps-Anwendung, die standardmäßig mit dem iPhone geliefert wird, gestartet wird, wenn Sie einen Link auf einer Webseite platzieren und dann darauf klicken, während Sie Mobile Safari auf dem iPhone verwenden.

Wie kann ich dieselbe Google Maps-Anwendung mit einer bestimmten Adresse in meiner nativen iPhone-Anwendung (dh keine Webseite über Mobile Safari) auf dieselbe Weise starten wie durch Tippen auf eine Adresse in Kontakte die Karte?

HINWEIS: DIESES FUNKTIONIERT NUR AM GERÄT. NICHT IM SIMULATOR.


Es funktioniert im Simulator und wird stattdessen nur in der mobilen Safari geöffnet.
PMKO

Antworten:


65

Verwenden Sie für iOS 5.1.1 und niedriger die openURLMethode von UIApplication. Es wird die normale magische URL-Neuinterpretation des iPhone durchführen. damit

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

sollte die Google Maps App aufrufen.

Ab iOS 6 rufen Sie Apples eigene Maps-App auf. Konfigurieren Sie dazu ein MKMapItemObjekt mit dem Ort, den Sie anzeigen möchten, und senden Sie ihm die openInMapsWithLaunchOptionsNachricht. Versuchen Sie Folgendes, um am aktuellen Standort zu beginnen:

[[MKMapItem mapItemForCurrentLocation] openInMapsWithLaunchOptions:nil];

Sie müssen dafür mit MapKit verknüpft sein (und ich glaube, es wird zur Eingabe des Standorts aufgefordert).


2
Wiki mit Beschreibung der Parameter: mapki.com/wiki/Google_Map_Parameters Apple iPhone OS-Programmierhandbuch Anhang A enthält eine Liste der unterstützten Parameter auf dem iPhone.
Carl Coryell-Martin

Dies ist undicht - anstelle von [[NSURL alloc] initWithString:]sollten Sie verwenden, [NSURL URLWithString:]da es ein automatisch freigegebenes Objekt bereitstellt.
Tim

@ Tim, behoben - danke. Fairerweise war es mir egal, wann diese Antwort zum ersten Mal veröffentlicht wurde, da die App beendet wurde, sobald der Anruf abgeschlossen war.
Adam Wright

Es ist immer wichtig! Außerdem, anstatt someUIApplicationSie könnten einfach sagen [UIApplication sharedApplication](da ich keine andere Situation kenne, in der Sie UIApplicationaußer einer machen würden)
Tim

2
Gemäß der Dokumentation von Apple ( developer.apple.com/library/ios/#featuredarticles/… ) sollten Sie maps.apple.com wie folgt verwenden : maps.apple.com/?q=London Dies würde die Notwendigkeit vermeiden, andere einzugeben Code abhängig von der Betriebssystemversion, da er in iOS 5 zu Google Maps umgeleitet wird.
Matt James

32

Genau. Der Code, den Sie benötigen, um dies zu erreichen, ist ungefähr so:

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

da gemäß der Dokumentation UIApplication nur im Anwendungsdelegierten verfügbar ist, es sei denn, Sie rufen sharedApplication auf.


7
Sie lecken die NSURL. Ich würde empfehlen: [app openURL: [NSURL URLWithString: @ " maps.google.com/maps?g=London"]], damit es automatisch veröffentlicht wird.
Matthew McGoogan

29

Probieren Sie diesen Code aus, um Google Maps an bestimmten Koordinaten zu öffnen:

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]];

Sie können die latlong-Zeichenfolge durch die aktuelle Position von CoreLocation ersetzen.

Sie können die Zoomstufe auch mit dem Flag (”z“) festlegen. Die Werte sind 1-19. Hier ist ein Beispiel:

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


2
Irgendwie funktioniert es bei "ll" nicht richtig, ich muss stattdessen "q" verwenden. Beispielsweise verweisen maps.google.com/maps?q=48.8588054,2.3030451 und maps.google.com/maps?ll=48.8588054,2.3030451 nicht auf dieselbe Adresse.
Enzo Tran


13

Hier ist die Apple URL Scheme-Referenz für Kartenlinks: https://developer.apple.com/library/archive/featuredarticles/iPhoneURLScheme_Reference/MapLinks/MapLinks.html

Die Regeln zum Erstellen eines gültigen Kartenlinks lauten wie folgt:

  • Die Domain muss google.com sein und die Subdomain muss Maps oder Ditu sein.
  • Der Pfad muss /, / maps, / local oder / m sein, wenn die Abfrage site als Schlüssel und local als Wert enthält.
  • Der Pfad kann nicht / maps / * sein.
  • Alle Parameter müssen unterstützt werden. In Tabelle 1 finden Sie eine Liste der unterstützten Parameter **.
  • Ein Parameter kann nicht q = * sein, wenn der Wert eine URL ist (daher wird KML nicht erfasst).
  • Die Parameter dürfen nicht view = text oder dirflg = r enthalten.

** Die Liste der unterstützten Parameter finden Sie unter dem obigen Link.


9

Wenn Sie ios 10 verwenden, vergessen Sie bitte nicht, Abfrageschemata in Info.plist hinzuzufügen

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

Wenn Sie Ziel-c verwenden

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]];
    }

Wenn Sie Swift 2.2 verwenden

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)!)
}

Wenn Sie Swift 3.0 verwenden

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

Testen Sie für die Telefonfrage auf dem Simulator? Dies funktioniert nur auf dem Gerät selbst.

Außerdem gibt openURL einen Bool zurück, mit dem Sie überprüfen können, ob das Gerät, auf dem Sie ausgeführt werden, die Funktionalität unterstützt. Zum Beispiel können Sie auf einem iPod Touch nicht telefonieren :-)


2

Rufen Sie einfach diese Methode auf und fügen Sie das Google Maps-URL-Schema wie in dieser Antwort zu Ihrer .plist-Datei hinzu .

Swift-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!)
        }
    }
}

Hoffe, das ist was du suchst. Alle Bedenken melden sich bei mir. :) :)


Es hat nicht funktioniert. Ich erzähle das Szenario. Beim Klicken auf die Schaltfläche übergebe ich die URL mit saddr und daddr und rufe UIApplication.shared.canOpenURL (unwrappedURL) auf . Jede Hilfe
iSrinivasan27

In Simulator haben Sie keine Google Maps-Anwendung. Ihre else-Bedingung wird also ausgeführt. Die URL wird im SAFARI-Browser geöffnet. Bitte deinstallieren Sie die Google Maps-Anwendung auf dem Gerät und überprüfen Sie sie. Es wird genauso funktionieren wie der Simulator.
Treffen Sie Doshi

Danke, man fragt das Thema ab. Wie kann ich überprüfen, ob Gmap auf dem iPhone installiert ist oder nicht
iSrinivasan27

Sieht so aus, als hätten Sie das iPhone noch nicht benutzt. Öffnen Sie einfach den Appstore und suchen Sie in Google Maps. Und überprüfen Sie, ob es eine Installationsoption oder eine offene Anwendungsoption gibt. Eine weitere Option ist die Suche in der Google Maps-App direkt in Ihrem Open, indem Sie die Geste auf dem iPhone-Startbildschirm drücken.
Treffen Sie Doshi

Ja, ich bin aber kein besserer Android User. Ich glaube, ich habe die Frage nicht richtig gestellt. Wie kann ich überprüfen, ob die Google Map App per Code auf dem iPhone installiert ist? um es zu öffnen oder zur Verwendung im App Store umzuleiten
iSrinivasan27

1

"g" wechselt zu "q"

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

1

Wenn Sie immer noch Probleme haben, zeigt dieses Video, wie Sie "Meine Karten" von Google auf dem iPhone anzeigen lassen können. Sie können dann den Link nehmen und an jeden senden, und es funktioniert.

http://www.youtube.com/watch?v=Xo5tPjsFBX4


1

Verwenden Sie diese API, um zur Google-Karte zu wechseln, und senden Sie den Längen- und Breitengrad des Ziels

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

Wenn Sie mehr Flexibilität benötigen, als das Google-URL-Format Ihnen bietet, oder wenn Sie eine Karte in Ihre Anwendung einbetten möchten, anstatt die Karten-App zu starten, finden Sie hier ein Beispiel .

Sie erhalten sogar den Quellcode für die gesamte Einbettung.


0

iPhone4 iOS 6.0.1 (10A523)

Für Safari und Chrome. Beide neueste Version bis jetzt (2013-Jun-10).

Das folgende URL-Schema funktioniert ebenfalls. Aber wenn Chrome nur innerhalb der Seite funktioniert, funktioniert es nicht über die Adressleiste.

Karten: q = GivenTitle @ Breite, Länge


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

Arbeitscode wie bei Swift 4:

Schritt 1 - Fügen Sie Folgendes zur info.plist hinzu

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

Schritt 2 - Verwenden Sie den folgenden Code, um Google Maps anzuzeigen

    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)
        }
    }
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.