2015-04-28 5 views
1

Я пытаюсь открыть приложение Google Maps, чтобы показать некоторые места на карте, каждый раз, когда пользователь нажимает на определенную кнопку, идея в том, что мое приложение откроет Google Maps, проблема в том, что единственное, ve - сокращенный URL-адрес Google, например: http://www.goo.gl/maps/XXXXX; где XXXXX изменяется в зависимости от местоположения, которое они просматривают.Как открыть сокращенный URL-адрес Google Карт из моего приложения?

Когда пользователи нажимают кнопку, я проверю, установлены ли они на Картах Google, если они не будут открывать Safari, это работает нормально, но я не знаю, как это сделать для Google Приложение Карты.

Есть ли способ открыть этот URL-адрес с помощью SDK Google Maps? Я прочитал информацию на этой странице https://developers.google.com/maps/documentation/ios/, но информация об этом случае не предоставляется.

Это часть моего кода:

if([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"comgooglemaps://"]]){ 
    //Open Google Maps App 
}else{ 
    [[UIApplication sharedApplication] openURL:selectedPlace.googleMapsLocation]; 
} 

Спасибо!

ответ

6

Укороченный URL-адрес, вероятно, не поддерживается в Google Maps iOS sdk url схеме.

Вы можете использовать Google URL Shortener API, чтобы преобразовать ваш укороченный URL-адрес обратно в длинный URL-адрес.

Пример запроса:
GET https://www.googleapis.com/urlshortener/v1/url?shortUrl=https%3A%2F%2Fgoo.gl%2Fmaps%2FviRnZ&key={YOUR_API_KEY}

Вы можете попробовать запрос API с вашим сокращенном URL от this link.

Из ответа API, вы можете получить длинный URL, что-то вроде этого: https://www.google.com/maps/@37.4249154,-122.0722049,13z Тогда вы можете разобрать широту и долготу переменных, и использовать их для параметра вашего IOS SDk схемы URL-адресов center, например 37.4249154,-122.0722049 является центром расположения, 13 является увеличение, то ваша схема URL будет @"comgooglemaps://?center=37.4249154,-122.0722049&zoom=13

This documentation даст вам рассказать подробности о Google Maps IOS схемы SDK URL. Код

Пример:

if ([[UIApplication sharedApplication] canOpenURL: 
    [NSURL URLWithString:@"comgooglemaps://"]]) { 
    [[UIApplication sharedApplication] openURL: 
    [NSURL URLWithString:@"comgooglemaps://?center=37.4249154,-122.0722049&zoom=13&views=traffic"]]; 
} else { 
    NSLog(@"Can't use comgooglemaps://"); 
} 

Полный пример кода для запроса длинный URL и открыть в карте Google:

NSURLSession *session = [NSURLSession sharedSession]; 
    [[session dataTaskWithURL:[NSURL URLWithString:@"https://www.googleapis.com/urlshortener/v1/url?shortUrl=https://goo.gl/maps/viRnZ&key=YOU_API_KEY"] completionHandler: 
     ^(NSData *data, NSURLResponse *response, NSError *error) { 
      if (!error) { 
       if ([response isKindOfClass:[NSHTTPURLResponse class]]) { 
        NSInteger statusCode = [(NSHTTPURLResponse *)response statusCode]; 
        if (statusCode != 200) { 
         NSLog(@"dataTaskWithRequest HTTP status code: %ld", (long)statusCode); 
         return; 
        } 
       } 
       NSError *jsonParseError = nil; 
       NSDictionary *json = [NSJSONSerialization JSONObjectWithData:data options:0 error:&jsonParseError]; 
       if (!jsonParseError) { 
        NSLog(@"%@", json); 
        NSString *longUrl = [json objectForKey:@"longUrl"]; 
        NSString *pattern = @".*[email protected]([0-9.\\-]*),([0-9.\\-]*),([0-9.\\-]*).*"; 
        NSError *regexError = nil; 
        NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:pattern options:0 error:&regexError]; 
        if (!regexError) { 
         NSArray* matches = [regex matchesInString:longUrl options:0 range:NSMakeRange(0, [longUrl length])]; 
         NSString *latitude = [longUrl substringWithRange:[[matches objectAtIndex:0] rangeAtIndex:1]]; 
         NSString *longitude = [longUrl substringWithRange:[[matches objectAtIndex:0] rangeAtIndex:2]]; 
         NSString *zoom = [longUrl substringWithRange:[[matches objectAtIndex:0] rangeAtIndex:3]]; 
         if ([[UIApplication sharedApplication] canOpenURL: 
          [NSURL URLWithString:@"comgooglemaps://"]]) { 
          NSString *openURL = [NSString stringWithFormat:@"comgooglemaps://?center=%@,%@&zoom=%@&views=traffic", latitude, longitude, zoom]; 
          [[UIApplication sharedApplication] openURL: 
          [NSURL URLWithString:openURL]]; 
         } else { 
          [[UIApplication sharedApplication] openURL: 
          [NSURL URLWithString:longUrl]]; 
         } 
        } else { 
         NSLog(@"REGEX error: %@", regexError); 
        } 
       } else { 
        NSLog(@"JSON parse error: %@", jsonParseError); 
       } 
      } else { 
       NSLog(@"API request error: %@", error); 
      } 
    }] resume]; 
+0

Wow! Это отлично работает! Я бы добавил только 'if (! Json [@" error "])' в начале разбора, чуть ниже 'NSLog (@"% @ ", json);', поэтому, если сервер отвечает с ошибкой например, 404, 403, приложение не падает. Просто, если кто-то в будущем хочет использовать этот код. Отлично! –

+0

@ LuisFernandoMata, только что обновил код, чтобы проверить ошибки json и regex. Также проверяется код состояния http. – ztan

Смежные вопросы