如何从我的应用中打开缩短的Google地图网址?

Fer*_*ata 1 google-maps objective-c ios

我正在尝试打开Goog​​le地图应用,以便在地图中显示某些地点,每次用户点击某个按钮时,我的应用都会打开谷歌地图,问题是我唯一拥有的是缩短了Google网址,例如http:// www.goo.gl/maps/XXXXX; XXXXX根据所选位置而变化的位置.

当用户点击按钮时,我会检查他们是否安装了谷歌地图,如果他们不安装谷歌地图,这可以正常工作,但我不知道如何为谷歌地图应用程序做.

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

这是我的代码的一部分:

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

谢谢!

zta*_*tan 6

Google地图iOS sdk网址方案可能不支持缩短的网址.

您可以使用Google URL Shortener API将缩短的网址转换回长网址.

样品申请:
GET https://www.googleapis.com/urlshortener/v1/url?shortUrl=https%3A%2F%2Fgoo.gl%2Fmaps%2FviRnZ&key={YOUR_API_KEY}

您可以使用此链接中的缩短网址尝试API请求.

从API响应中,您可以获得一个长URL,如下所示:https://www.google.com/maps/@37.4249154,-122.0722049,13z 然后您可以将纬度和经度解析为变量,并将它们用于centeriOS sdk url方案的参数,例如37.4249154,-122.0722049是位置的中心,13是缩放,那么您的网址方案将是@"comgooglemaps://?center=37.4249154,-122.0722049&zoom=13

本文档将告诉您有关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://");
}
Run Code Online (Sandbox Code Playgroud)

请求长网址并在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];
Run Code Online (Sandbox Code Playgroud)