Comment puis-je lancer l'application iPhone Google Maps depuis ma propre application native ?

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

  •  09-06-2019
  •  | 
  •  

Question

Le Documentation pour les développeurs Apple (le lien est mort maintenant) explique que si vous placez un lien dans une page Web puis cliquez dessus tout en utilisant Mobile Safari sur l'iPhone, l'application Google Maps fournie en standard avec l'iPhone se lancera.

Comment puis-je lancer la même application Google Maps avec une adresse spécifique depuis ma propre application iPhone native (c'est-à-direpas une page Web via Mobile Safari) de la même manière qu'appuyer sur une adresse dans Contacts lance la carte ?

NOTE:CELA NE FONCTIONNE QUE SUR L'APPAREIL LUI-MÊME.PAS DANS LE SIMULATEUR.

Était-ce utile?

La solution

Pour iOS 5.1.1 et versions antérieures, utilisez le openURL méthode de UIApplication.Il effectuera la réinterprétation normale de l’URL magique de l’iPhone.donc

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

devrait appeler l'application Google Maps.

À partir d'iOS 6, vous appellerez la propre application Maps d'Apple.Pour cela, configurez un MKMapItem objet avec l'emplacement que vous souhaitez afficher, puis envoyez-lui le openInMapsWithLaunchOptions message.Pour commencer à l'emplacement actuel, essayez :

[[MKMapItem mapItemForCurrentLocation] openInMapsWithLaunchOptions:nil];

Vous devrez être lié à MapKit pour cela (et il vous demandera d'accéder à la localisation, je crois).

Autres conseils

Exactement.Le code dont vous avez besoin pour y parvenir ressemble à ceci :

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

depuis selon la documentation, UIApplication n'est disponible que dans le délégué d'application, sauf si vous appelez sharedApplication.

Pour ouvrir Google Maps à des coordonnées spécifiques, essayez ce code :

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

Vous pouvez remplacer la chaîne latlong par l'emplacement actuel de CoreLocation.

Vous pouvez également spécifier le niveau de zoom à l'aide du drapeau (« z »).Les valeurs sont 1-19.Voici un exemple :

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

Il existe également désormais l'application Google Maps de l'App Store, documentée sur https://developers.google.com/maps/documentation/ios/urlscheme

Vous devez donc d'abord vérifier qu'il est installé :

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

Et puis vous pouvez remplacer conditionnellement http://maps.google.com/maps?q= avec comgooglemaps://?q=.

Voici la référence du schéma d'URL Apple pour les liens cartographiques : https://developer.apple.com/library/archive/featuredarticles/iPhoneURLScheme_Reference/MapLinks/MapLinks.html

Les règles de création d'un lien cartographique valide sont les suivantes :

  • Le domaine doit être google.com et le sous-domaine doit être maps ou ditu.
  • Le chemin doit être /, /maps, /local ou /m si la requête contient site comme clé et local comme valeur.
  • Le chemin ne peut pas être /maps/*.
  • Tous les paramètres doivent être pris en charge.Voir le tableau 1 pour la liste des paramètres pris en charge**.
  • Un paramètre ne peut pas être q=* si la valeur est une URL (donc KML n'est pas récupéré).
  • Les paramètres ne peuvent pas inclure view=text ou dirflg=r.

**Voir le lien ci-dessus pour la liste des paramètres pris en charge.

Si vous utilisez iOS 10, n'oubliez pas d'ajouter des schémas de requête dans Info.plist

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

Si vous utilisez 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]];
    }

Si vous utilisez 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)!)
}

Si vous utilisez 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)!)
}

Pour la question téléphonique, testez-vous sur le simulateur ?Cela ne fonctionne que sur l'appareil lui-même.

De plus, openURL renvoie un bool, que vous pouvez utiliser pour vérifier si l'appareil sur lequel vous exécutez prend en charge la fonctionnalité.Par exemple, vous ne pouvez pas passer d'appels sur un iPod Touch :-)

Appelez simplement cette méthode et ajoutez le schéma d'URL Google Maps dans votre fichier .plist comme celui-ci Répondre.

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

J'espère que c'est ce que vous recherchez.Tout souci me revient.:)

"g" remplacé par "q"

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

Si vous rencontrez toujours des problèmes, cette vidéo montre comment faire apparaître "Mes cartes" de Google sur l'iPhone - vous pouvez ensuite prendre le lien et l'envoyer à n'importe qui et cela fonctionne.

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

Pour passer à Google Map, utilisez cette API et envoyez la latitude et la longitude de la destination.

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

Si vous avez besoin de plus de flexibilité que ce que le format d'URL de Google vous offre ou si vous souhaitez intégrer une carte dans votre application au lieu de lancer l'application de carte, vous trouverez un exemple sur https://sourceforge.net/projects/quickconnect.

Si vous avez besoin de plus de flexibilité que ce que le format d'URL de Google vous offre ou si vous souhaitez intégrer une carte dans votre application au lieu de lancer l'application cartographique Voici un exemple.

Il vous fournira même le code source pour effectuer toute l’intégration.

iPhone4 iOS 6.0.1 (10A523)

Pour Safari et Chrome.Les deux dernières versions à ce jour (10 juin 2013).

Le schéma d'URL ci-dessous fonctionne également.Mais dans le cas de Chrome, cela ne fonctionne qu'à l'intérieur de la page, cela ne fonctionne pas à partir de la barre d'adresse.

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

Code de travail comme sur Swift 4 :

Étape 1 - Ajouter les éléments suivants à info.plist

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

Étape 2 - Utilisez le code suivant pour afficher Google Maps

    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)
        }
    }
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top