我正在尝试使用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单一应用程序项目。
答案 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()
}