谷歌地方Api iOS每日限制未经身份验证使用超出错误

时间:2016-07-15 13:44:32

标签: ios swift google-places-api

我正在尝试使用google places api for iOS。我创建了一个api密钥,然后我试着调用一些方法。我已经在应用程序中输入了api键但是当我拨打电话时出现了这个错误

lookup place id query error: The operation couldn’t be completed. (com.google.places.server.ErrorDomain error -1.)
Error Domain=com.google.places.server.ErrorDomain Code=-1 "(null)" UserInfo={NSUnderlyingError=0x7f8bf861ca80 {Error
     

Domain = com.google.GTLJSONRPCErrorDomain Code = 403“(每日限制为   未经验证的使用超出。继续使用需要注册。)“   UserInfo = {error =超出未经身份验证的使用的每日限制。   继续使用需要注册。,NSLocalizedFailureReason =(每日限制   用于未经验证的使用超出。继续使用需要注册。),   GTLStructuredError = GMSx_GTLErrorObject 0x7f8bf2be6060:{message:“每日   超出未经身份验证的使用限制。继续使用需要   注册。“数据:[1]代码:403}}}}

我使用GMSServices.provideAPIKey(“MY_API_KEY”)在我的appdelegate中提供了api密钥,并且我已经给了应用程序的位置访问权限。我当然没有超过我的使用限制(我的配额显示1000中的0)因为我无法与api交谈。我有时候重新生成了密钥,而且我还用其他gmail帐户创建了其他密钥,但没有任何工作......

我的猜测是ios模拟器位置不合适(我提供了一个gpx文件来传递自定义位置)或谷歌方面出了问题。

我的代码中的两个示例是:

                let placeID = "ChIJV4k8_9UodTERU5KXbkYpSYs"

            placesClient.lookUpPlaceID(placeID, callback: { (place: GMSPlace?, error: NSError?) -> Void in
                if let error = error {
                    print("lookup place id query error: \(error.localizedDescription)")
                    print(error)
                    return
                }

                if let place = place {
                    print("Place name \(place.name)")
                    print("Place address \(place.formattedAddress)")
                    print("Place placeID \(place.placeID)")
                    print("Place attributions \(place.attributions)")
                } else {
                    print("No place details for \(placeID)")
                }
            })

                placesClient.currentPlaceWithCallback({ (placeLikelihoods, error) -> Void in
                guard error == nil else {
                    print("Current Place error: \(error!.localizedDescription)")
                    return
                }

                if let placeLikelihoods = placeLikelihoods {
                    for likelihood in placeLikelihoods.likelihoods {
                        let place = likelihood.place
                        print("Current Place name \(place.name) at likelihood \(likelihood.likelihood)")
                        print("Current Place address \(place.formattedAddress)")
                        print("Current Place attributions \(place.attributions)")
                        print("Current PlaceID \(place.placeID)")
                    }
                }
            })

placesClient是一个var实例化为GMSPlacesClient()。 我在这里错过了什么吗? 其余代码是典型的Xcode单一应用程序项目。

1 个答案:

答案 0 :(得分:18)

在这里回答我自己的问题!

原来错误完全是我的(通常是这样)。我正在设置像这样的placesClient var

var placesClient = GMSPlacesClient()

在google的示例(check it here)中,placesClient var被声明为可选的GMSPlacesClient,然后在viewDidLoad中设置为GMSPlacesClient.sharedClient()。不幸的是我错过了那部分。代码就像

var placesClient: GMSPlacesClient?

override func viewDidLoad() {
    super.viewDidLoad()
    placesClient = GMSPlacesClient.sharedClient()
}