Укороченный 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:®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];
Wow! Это отлично работает! Я бы добавил только 'if (! Json [@" error "])' в начале разбора, чуть ниже 'NSLog (@"% @ ", json);', поэтому, если сервер отвечает с ошибкой например, 404, 403, приложение не падает. Просто, если кто-то в будущем хочет использовать этот код. Отлично! –
@ LuisFernandoMata, только что обновил код, чтобы проверить ошибки json и regex. Также проверяется код состояния http. – ztan