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

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

  •  09-06-2019
  •  | 
  •  

Вопрос

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

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

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

Это было полезно?

Решение

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

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

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

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

[[MKMapItem mapItemForCurrentLocation] openInMapsWithLaunchOptions:nil];

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

Другие советы

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

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

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

Чтобы открыть Карты 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]];

Вы можете заменить строку latlong текущим местоположением из CoreLocation.

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

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

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

Итак, сначала проверьте, что он установлен:

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

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

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

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

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

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

Если вы используете 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)!)
}

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

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

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

Стриж-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!)
        }
    }
}

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

«г» изменить на «к»

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

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

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

Для перехода на карту 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];

Если вам нужна большая гибкость, чем дает вам формат URL-адреса Google, или вы хотите встроить карту в свое приложение вместо запуска приложения карты, пример можно найти по адресу https://sourceforge.net/projects/quickconnect.

Если вам нужна большая гибкость, чем дает вам формат URL-адреса Google, или вы хотите встроить карту в свое приложение вместо запуска приложения карты вот пример.

Он даже предоставит вам исходный код для всех встраиваний.

iPhone4 iOS 6.0.1 (10A523)

И для Safari, и для Chrome.Обе последние версии на данный момент (10 июня 2013 г.).

Схема URL-адресов ниже также работает.Но в случае, если Chrome работает только внутри страницы, из адресной строки он не работает.

карты:q=GivenTitle@широта,долгота

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

Рабочий код как в Swift 4:

Шаг 1. Добавьте подписку в info.plist

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

Шаг 2. Используйте следующий код для отображения карт Google

    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)
        }
    }
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top