iOS上的Google Places API自动填充function

在过去的几天里,我一直在努力让Google地方信息自动填充工作在我的应用上,无论我做什么,我总是得到REQUEST_DENIED错误。

我按照Google的“教程”进行实施,启用了Places API,API密钥具有正确的捆绑ID,我还使用浏览器ID进行了测试,但没有成功。

不过,我很确定它与密钥有关。 奇怪的是,在Android版本的应用程序中,该服务将与浏览器密钥一起使用。 显然,在浏览器上,它也适用于该键。

这些是我尝试过的两个键:

Google API控制台

这是我的实现代码,使用AFNetworking

  NSURL *url = [NSURL URLWithString:@"https://maps.googleapis.com/maps/api/place/autocomplete/"]; NSDictionary *params = @{@"input" : [input stringByReplacingOccurrencesOfString:@" " withString:@"+"], @"location" : [NSString stringWithFormat:@"%f,%f", searchCoordinate.latitude, searchCoordinate.longitude], @"sensor" : @(true), // @"language" : @"pt_BR", // @"types" : @"(regions)", // @"components" : @"components=country:br", @"key" : GOOGLE_API_KEY}; AFHTTPClient *httpClient = [[AFHTTPClient alloc] initWithBaseURL:url]; [httpClient setParameterEncoding:AFFormURLParameterEncoding]; [httpClient getPath:@"json" parameters:params success:^(AFHTTPRequestOperation *operation, id responseObject) { NSDictionary *JSON = [[NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingAllowFragments error:nil] dictionaryWithoutNulls]; if (completion) { completion(JSON[@"predictions"]); } } failure:^(AFHTTPRequestOperation *operation, NSError *errorResponse) { NSLog(@"[HTTPClient Error]: %@ for URL %@", [errorResponse localizedDescription], [[[operation request] URL] path]); }]; 

我知道这里有一些像这样的问题,但是有些问题已经过时了,并说Places API在Android或iOS上不起作用,显然情况不再如此,因为Google本身在两个平台上发布了示例,如地图所示API页面: https : //developers.google.com/places/documentation/autocomplete

我目前正在使用的解决方法是Apple的GeoCoding系统,当你输入完整的地址时效果很好,但是对于半类短语来说很糟糕。 这根本不好,我真的很想使用谷歌的API。

我知道了!

参数sensor应该接收@"true"@"false" ,而不是@(true)@(false)

对于记录,使用的API密钥确实是浏览器密钥,而不是iOS密钥。

您应该使用基本URL @"https://maps.googleapis.com/"初始化httpClient并获取path /maps/api/place/autocomplete/json 。 基本URL – 仅限主机,它不占用路径的其他部分,因此在您的情况下,您会收到URL“ https://maps.googleapis.com/json ”的请求。