Comment puis-je lancer l'application iPhone Google Maps à partir de ma propre application native?

L' Apple Developer Documentation (le lien est maintenant mort) explique que si vous placez un lien dans une page Web et que vous cliquez dessus tout en utilisant Mobile Safari sur l'iPhone, l'application Google Maps fournie en standard avec l'iPhone sera lancée.

Comment puis-je lancer la même application Google Maps avec une adresse spécifique à partir de ma propre application iPhone native (c'est-à-dire pas une page Web via Mobile Safari) de la même manière que si j'appuie sur une adresse dans Contacts pour lancer la carte?

NOTE: Ceci ne fonctionne que sur l'appareil lui-même. PAS DANS LE SIMULATEUR.

Pour iOS 5.1.1 et inférieur, utilisez la méthode UIApplication de UIApplication . Il effectuera la réinterprétation d'URL magique normale de l'iPhone. alors

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

devrait invoquer l'application Google Maps.

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

 [[MKMapItem mapItemForCurrentLocation] openInMapsWithLaunchOptions:nil]; 

Vous aurez besoin d'être lié à MapKit pour cela (et il vous requestra l'access à la localization, je crois).

Exactement. Le code dont vous avez besoin pour cela est quelque chose comme ça:

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

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

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

 NSSsortingng *latlong = @"-56.568545,1.256281"; NSSsortingng *url = [NSSsortingng ssortingngWithFormat: @"http://maps.google.com/maps?ll=%@", [latlong ssortingngByAddingPercentEscapesUsingEncoding:NSUTF8SsortingngEncoding]]; [[UIApplication sharedApplication] openURL:[NSURL URLWithSsortingng:url]]; 

Vous pouvez replace la string latlong par l'location actuel de CoreLocation.

Vous pouvez également spécifier le niveau de zoom en utilisant le drapeau ("z"). Les valeurs sont 1-19. Voici un exemple:

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

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

Donc, vous devez d'abord vérifier qu'il est installé:

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

Et ensuite, vous pouvez replace http://maps.google.com/maps?q= avec comgooglemaps://?q= .

Voici la reference du schéma d'URL Apple pour les liens cartocharts: http://developer.apple.com/iphone/library/featuredarticles/iPhoneURLScheme_Reference/Articles/MapLinks.html

Les règles pour créer un lien de carte valide sont les suivantes:

  • Le domaine doit être google.com et le sous-domaine doit être map ou ditu.
  • Le path doit être /, / maps, / local ou / m si la requête contient le site en tant que key et local en tant que valeur.
  • Le path ne peut pas être / maps / *.
  • Tous les parameters doivent être pris en charge. Voir le Tableau 1 pour la list des parameters pris en charge **.
  • Un paramètre ne peut pas être q = * si la valeur est une URL (donc KML n'est pas détecté).
  • Les parameters ne peuvent pas inclure view = text ou dirflg = r.

** Voir le lien ci-dessus pour la list des parameters supportés.

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

 <key>LSApplicationQueriesSchemes</key> <array> <ssortingng>comgooglemaps</ssortingng> </array> 

Si vous utilisez l'objective-c

 if ([[UIApplication sharedApplication] canOpenURL: [NSURL URLWithSsortingng:@"comgooglemaps:"]]) { NSSsortingng *urlSsortingng = [NSSsortingng ssortingngWithFormat:@"comgooglemaps://?ll=%@,%@",destinationLatitude,destinationLongitude]; [[UIApplication sharedApplication] openURL:[NSURL URLWithSsortingng:urlSsortingng]]; } else { NSSsortingng *ssortingng = [NSSsortingng ssortingngWithFormat:@"http://maps.google.com/maps?ll=%@,%@",destinationLatitude,destinationLongitude]; [[UIApplication sharedApplication] openURL:[NSURL URLWithSsortingng:ssortingng]]; } 

Si vous utilisez swift 2.2

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

Si vous utilisez swift 3.0

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

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

En outre, openURL renvoie un bool, que vous pouvez utiliser pour vérifier si le périphérique que vous exécutez prend en charge la fonctionnalité. Par exemple, vous ne pouvez pas passer d'appels sur un iPod Touch 🙂

"g" change en "q"

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

Si vous avez encore des problèmes, cette video montre comment get "Mes maps" de google pour apparaître sur l'iphone – vous pouvez alors prendre le lien et l'envoyer à n'importe qui et cela fonctionne.

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

Pour passer à la carte Google, utilisez cette API et envoyez la latitude et la longitude

 NSSsortingng* addr = nil; addr = [NSSsortingng ssortingngWithFormat:@"http://maps.google.com/maps?daddr=%1.6f,%1.6f&saddr=Posizione attuale", destinationLat,destinationLong]; NSURL* url = [[NSURL alloc] initWithSsortingng:[addr ssortingngByAddingPercentEscapesUsingEncoding:NSUTF8SsortingngEncoding]]; [[UIApplication sharedApplication] openURL:url]; 

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

Si vous avez besoin de plus de flexibilité que le format d'URL de Google vous donne 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 faire tout l'enrobage.

iPhone4 iOS 6.0.1 (10A523)

Pour Safari et Chrome. Les deux dernières versions jusqu'à maintenant (2013-Jun-10th).

Le schéma d'URL ci-dessous fonctionne également. Mais dans le cas de Chrome ne fonctionne que dans la page ne fonctionne pas à partir de la barre d'adresse.

maps: q = GivenTitle @ latitude, longtitude

 **Getting Directions between 2 locations** NSSsortingng *googleMapUrlSsortingng = [NSSsortingng ssortingngWithFormat:@"http://maps.google.com/?saddr=%@,%@&daddr=%@,%@", @"30.7046", @"76.7179", @"30.4414", @"76.1617"]; [[UIApplication sharedApplication] openURL:[NSURL URLWithSsortingng:googleMapUrlSsortingng]];