如何从我的应用程序打开缩短的Google Maps URL?
我试图打开Google地图应用程序,以便在地图中显示某些地方,每次用户单击某个button时,我的应用程序将打开Google地图,问题是我唯一拥有的是缩短的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:®exError]; 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];
- 我怎样才能检查一个CLLocationCoordinate2D是否在四个CLLocationCoordinate2D Square内? 在目标C与谷歌地图
- 是否有可能根据地点types/类别过滤GMSPlacePicker
- iOS布局animation在GMSMapView拖动时忽略持续时间
- Google Maps API:获取当前位置iOS的坐标
- 在Google地图iOS SDK中跟踪用户path
- iOS GoogleMaps SDK错误:“:无法识别的select器发送”
- 如何从JSON输出数据解码路由点?
- GoogleMaps不是dylib,编译最新版本的pod文件的时间错误
- 在Google Maps for iOS上路线图不要按照街道线路进行