Как я могу запустить приложение Google Maps для iPhone из собственного собственного приложения? - PullRequest
68 голосов
/ 27 августа 2008

Документация разработчика Apple (ссылка устарела) объясняет, что если вы разместите ссылку на веб-странице и затем щелкните по ней, используя Mobile Safari на iPhone, приложение Google Maps, которое предоставляется как стандарт с iPhone будет запущен.

Как я могу запустить одно и то же приложение Google Maps с определенным адресом из моего собственного собственного приложения для iPhone (т.е. не веб-страницы через Mobile Safari) так же, как при нажатии адреса в Контактах запускается карта?

ПРИМЕЧАНИЕ: ЭТО ТОЛЬКО РАБОТАЕТ НА УСТРОЙСТВЕ. НЕ В СИМУЛЯТОРЕ.

Ответы [ 16 ]

65 голосов
/ 27 августа 2008

Для iOS 5.1.1 и ниже используйте openURL метод UIApplication. Он будет выполнять обычную реинтерпретацию магического URL-адреса iPhone. так

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

должен вызвать приложение Google maps.

Начиная с iOS 6, вы будете запускать собственное приложение Apple для карт. Для этого настройте объект MKMapItem с местоположением, которое вы хотите отобразить, а затем отправьте ему сообщение openInMapsWithLaunchOptions. Чтобы начать с текущего местоположения, попробуйте:

[[MKMapItem mapItemForCurrentLocation] openInMapsWithLaunchOptions:nil];

Для этого вам нужно будет связаться с MapKit (я думаю, он запросит доступ к местоположению).

31 голосов
/ 27 августа 2008

Точно. Код, необходимый для достижения этой цели, выглядит примерно так:

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

, начиная с согласно документации , UIApplication доступно только в делегате приложения, если вы не вызываете sharedApplication.

29 голосов
/ 10 февраля 2009

Чтобы открыть Карты Google в определенных координатах, попробуйте следующий код:

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.

Вы также можете указать уровень масштабирования, используя флаг («z»). Значения 1-19. Вот пример:

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

18 голосов
/ 13 декабря 2012

Существует также приложение App Store Google Maps, документально подтвержденное на https://developers.google.com/maps/documentation/ios/urlscheme

Итак, вы сначала убедитесь, что он установлен:

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

И тогда вы можете условно заменить http://maps.google.com/maps?q= на comgooglemaps://?q=.

13 голосов
/ 13 ноября 2009

Вот ссылка на схему ссылок Apple для ссылок на карту: https://developer.apple.com/library/archive/featuredarticles/iPhoneURLScheme_Reference/MapLinks/MapLinks.html

Правила создания действительной ссылки на карту следующие:

  • Домен должен быть google.com, а поддоменом должны быть карты или ditu.
  • Путь должен быть /, / maps, / local или / m, если запрос содержит site в качестве ключа и local в качестве значения.
  • Путь не может быть /maps/*.
  • Все параметры должны поддерживаться. В таблице 1 приведен список поддерживаемых параметров **.
  • Параметр не может быть q = *, если значение является URL-адресом (поэтому KML не выбран).
  • Параметры не могут включать view = text или dirflg = r.

** Список поддерживаемых параметров см. По ссылке выше.

9 голосов
/ 29 декабря 2016

Если вы используете ios 10, не забудьте добавить схемы запросов в Info.plist

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

Если вы используете цель-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 голосов
/ 27 декабря 2017

Просто вызовите этот метод и добавьте URL-схему Google Maps в ваш файл .plist так же, как этот Ответ .

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

Надеюсь, это то, что вы ищете. Любое беспокойство вернуться ко мне. :)

2 голосов
/ 10 февраля 2009

По телефону, тестируете ли вы на симуляторе? Это работает только на самом устройстве.

Кроме того, openURL возвращает bool, который вы можете использовать для проверки, поддерживает ли устройство, на котором вы работаете, эту функциональность. Например, вы не можете звонить на iPod Touch: -)

1 голос
/ 07 марта 2017

Для перехода на карту 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];
1 голос
/ 21 июля 2010

Если у вас все еще есть проблемы, это видео показывает, как получить «Мои карты» от Google, чтобы показать на iphone - вы можете взять ссылку и отправить ее любому, и она работает.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...