2

在过去的几天里,我一直在努力让 Google Places 自动完成功能在我的应用程序上运行,无论我做什么,我总是会收到REQUEST_DENIED错误消息。

我按照谷歌的“教程”进行了实现,启用了 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 本身在这两个平台上都发布了示例,如 Places 所示API 页面:https ://developers.google.com/places/documentation/autocomplete

我目前使用的一种解决方法是 Apple 的 GeoCoding 系统,当您输入完整地址时效果很好,但对于半输入的短语则很糟糕。这一点都不好,我真的很想使用谷歌的 API。

4

3 回答 3

2

I got it!

The paramenter sensor should receive either @"true"or @"false", and not @(true)or @(false).

For the record, the API key used is indeed the Browser Key, and not an iOS key.

于 2013-10-22T17:40:11.160 回答
1

https://maps.googleapis.com/maps/api/geocode/json?address= "%@","%@"&sensor=false,yourAddress,your c

于 2015-02-19T09:39:07.793 回答
1

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

于 2013-10-22T14:14:39.520 回答