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

StackOverflow https://stackoverflow.com/questions/30058

  •  09-06-2019
  •  | 
  •  

Frage

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

Wie kann ich dieselbe Google Maps-Anwendung mit einer bestimmten Adresse aus meiner eigenen nativen iPhone-Anwendung heraus starten (z. B.(nicht eine Webseite über Mobile Safari) auf die gleiche Weise, wie durch Tippen auf eine Adresse in den Kontakten die Karte gestartet wird?

NOTIZ:DAS FUNKTIONIERT NUR AUF DEM GERÄT SELBST.NICHT IM SIMULATOR.

War es hilfreich?

Lösung

Verwenden Sie für iOS 5.1.1 und niedriger die openURL Methode von UIApplication.Es wird die normale magische URL-Neuinterpretation des iPhone durchgeführt.Also

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

sollte die Google Maps-App aufrufen.

Ab iOS 6 rufen Sie Apples eigene Karten-App auf.Konfigurieren Sie dazu eine MKMapItem Objekt mit dem Ort, den Sie anzeigen möchten, und senden Sie es dann openInMapsWithLaunchOptions Nachricht.Versuchen Sie Folgendes, um am aktuellen Standort zu beginnen:

[[MKMapItem mapItemForCurrentLocation] openInMapsWithLaunchOptions:nil];

Dazu müssen Sie mit MapKit verknüpft sein (und ich glaube, es wird Sie zum Zugriff auf den Standort auffordern).

Andere Tipps

Genau.Der Code, den Sie benötigen, um dies zu erreichen, sieht etwa so aus:

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

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

Versuchen Sie diesen Code, 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 den aktuellen Standort von CoreLocation ersetzen.

Sie können auch die Zoomstufe angeben, indem Sie das Flag („z“) verwenden.Die Werte liegen zwischen 1 und 19.Hier ist ein Beispiel:

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

Es gibt jetzt auch die Google Maps-App im App Store, dokumentiert unter https://developers.google.com/maps/documentation/ios/urlscheme

Überprüfen Sie also zunächst, ob es installiert ist:

[[UIApplication sharedApplication] canOpenURL: [NSURL URLWithString:@"comgooglemaps://"]];

Und dann können Sie bedingt ersetzen http://maps.google.com/maps?q= mit comgooglemaps://?q=.

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 darf nicht /maps/* sein.
  • Alle Parameter müssen unterstützt werden.Eine Liste der unterstützten Parameter finden Sie in Tabelle 1**.
  • Ein Parameter kann nicht q=* sein, wenn der Wert eine URL ist (damit KML nicht erfasst wird).
  • Die Parameter dürfen weder view=text noch dirflg=r enthalten.

**Siehe den Link oben für die Liste der unterstützten Parameter.

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

Zur telefonischen Frage: Testen Sie am Simulator?Dies funktioniert nur auf dem Gerät selbst.

Außerdem gibt openURL einen Bool-Wert zurück, mit dem Sie überprüfen können, ob das Gerät, auf dem Sie es ausführen, die Funktionalität unterstützt.Mit einem iPod Touch kann man zum Beispiel nicht telefonieren :-)

Rufen Sie einfach diese Methode auf und fügen Sie das Google Maps-URL-Schema auf die gleiche Weise in Ihre .plist-Datei ein Antwort.

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

Ich hoffe, das ist es, wonach Sie suchen.Sollten Sie Bedenken haben, wenden Sie sich bitte an mich.:) :)

„g“ wird zu „q“

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

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

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

Um zur Google-Karte zu wechseln, verwenden Sie diese API und senden Sie den Breiten- und Längengrad 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];

Wenn Sie mehr Flexibilität benötigen, als das Google-URL-Format Ihnen bietet, oder eine Karte in Ihre Anwendung einbetten möchten, anstatt die Karten-App zu starten, finden Sie ein Beispiel unter https://sourceforge.net/projects/quickconnect.

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

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

iPhone4 iOS 6.0.1 (10A523)

Für Safari und Chrome.Beide aktuellsten Versionen (10. Juni 2013).

Das folgende URL-Schema funktioniert ebenfalls.Wenn Chrome jedoch nur innerhalb der Seite funktioniert, funktioniert dies nicht über die Adressleiste.

Karten:q=GivenTitle@latitude,longtitude

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

Arbeitscode wie bei Swift 4:

Schritt 1 – Folgendes zur info.plist hinzufügen

<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)
        }
    }
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top