Google 地点 Api iOS 超出未验证使用的每日限制错误

Google Places Api iOS Daily Limit for Unauthenticated Use Exceeded error

我正在尝试将 google 个位置 api 用于 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 "(Daily Limit for Unauthenticated Use Exceeded. Continued use requires signup.)" UserInfo={error=Daily Limit for Unauthenticated Use Exceeded. Continued use requires signup., NSLocalizedFailureReason=(Daily Limit for Unauthenticated Use Exceeded. Continued use requires signup.), GTLStructuredError=GMSx_GTLErrorObject 0x7f8bf2be6060: {message:"Daily Limit for Unauthenticated Use Exceeded. Continued use requires signup." data:[1] code:403}}}}

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

我的猜测是 ios 模拟器位置有问题(我提供了一个 gpx 文件来传递自定义位置)或者 google 方面有问题。

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

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

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

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

var placesClient = GMSPlacesClient()

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

var placesClient: GMSPlacesClient?

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