如何从我的应用程序打开缩短的Google Maps URL?

我试图打开Goog​​le地图应用程序,以便在地图中显示某些地方,每次用户单击某个button时,我的应用程序将打开Goog​​le地图,问题是我唯一拥有的是缩短的Googleurl,例如: http : //www.goo.gl/maps/XXXXX ; XXXXX根据他们正在观看的位置而改变。

当用户点击button,我会检查他们是否安装了Google地图,如果他们不,我会打开Safari浏览器,这工作得很好,但我不知道如何做的谷歌地图应用程序。

有没有办法用Google Maps SDK打开这个URL? 我已阅读此页面中的信息https://developers.google.com/maps/documentation/ios/ ,但未提供有关此案例的信息。

这是我的代码的一部分:

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

谢谢!

Google地图iOS sdk urlscheme可能不支持缩短的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}

您可以使用此链接中缩短的url来尝试API请求。

从API响应,你可以得到一个很长的url,如下所示: https://www.google.com/maps/@37.4249154,-122.0722049,13z : https://www.google.com/maps/@37.4249154,-122.0722049,13z然后,你可以parsingvariables的经度和纬度,并将其用于您的iOS sdk urlscheme的center参数,例如37.4249154,-122.0722049是位置的中心, 13是缩放,那么您的urlscheme将是@"comgooglemaps://?center=37.4249154,-122.0722049&zoom=13

本文档将告诉您有关Google Maps iOS SDK的urlscheme的详细信息。

示例代码:

 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 = @".*?@([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];