我正在尝试将当前用户位置上传到Parse但是我无法检索当前用户位置。我在这里按照教程并直接从那里复制了所有必要的代码但是我收到错误:当前位置错误:操作无法完成。尚未启用Places API for iOS。有关如何启用适用于iOS的Google Places API的信息,请参阅开发人员指南(https://developers.google.com/places/ios/start)。
以下是我的以下viewdidload以及上传功能。
@IBOutlet weak var viewMap: GMSMapView!
var placesClient: GMSPlacesClient?
override func viewDidLoad() {
super.viewDidLoad()
placesClient = GMSPlacesClient()
let testObject = PFObject(className: "TestObject")
testObject["foo"] = "bar"
testObject.saveInBackgroundWithBlock { (success: Bool, error: NSError?) -> Void in
print("Object has been saved.")
}
let camera = GMSCameraPosition.cameraWithLatitude(33.600727, longitude: -117.900840, zoom: 16.9)
viewMap.camera = camera
viewMap.myLocationEnabled = true
viewMap.settings.myLocationButton = true
let marker = GMSMarker()
marker.position = CLLocationCoordinate2DMake(33.600727, -117.900840)
marker.title = "Newport Beach"
marker.snippet = "California"
marker.map = viewMap
// Do any additional setup after loading the view, typically from a nib.
Upload()
}
var gmsPlace : GMSPlace?
var gpsCoordinates : String?
func Upload() {
// var place : GMSPlace
var placesClient = GMSPlacesClient.sharedClient()
placesClient.currentPlaceWithCallback { (placeLikelihoods, error) -> Void in
guard error == nil else {
print("Current Place error: \(error!.localizedDescription)")
return
}
var place : GMSPlace
if let placeLikelihoods = placeLikelihoods {
for likelihood in placeLikelihoods.likelihoods {
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)")
self.gpsCoordinates = (place.placeID)
print(self.path)
var videodata: NSData
videodata = (NSData.dataWithContentsOfMappedFile(self.path!) as? NSData)!
let file = PFFile(name:"upload.mp4", data:videodata)
let uploadedVideo = PFObject(className:"UploadedVideo")
uploadedVideo["GPS"] = self.gpsCoordinates
uploadedVideo["VideoFile"] = file
uploadedVideo.saveInBackground()
file!.saveInBackgroundWithBlock { (success: Bool, error: NSError?) -> Void in print("File has been saved")
}
}
}
}
}
答案 0 :(得分:11)
按照以下步骤在Google Developers Console上的项目中启用Google Places API for iOS和Google Maps SDK for iOS。如果您的项目还没有iOS密钥(一种API密钥),这些说明也可以帮助您创建新的API密钥。
单击“创建”。您的新iOS密钥会显示在项目的API密钥列表中。 API密钥是一串字符,如下所示:
AIzaSyBdVl-cTICSwYKrZ95SuvNw7dbMuDt1KG0
注意: 您需要在Google开发者控制台中启用地图服务。在新的布局中,选择API&左列中的auth部分和API子项。接下来,在右侧,通过单击“关闭”按钮启用Maps SDK for iOS。
要查找本地商家或设备当前所在的其他位置,请致电GMSPlacesClient currentPlaceWithCallback:
。包含一个回调方法来处理结果。
以下代码示例检索设备最可能位于的位置列表,并记录每个位置的名称,可能性和其他详细信息。
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)")
}
}
})
这是一张相关的SO票,讨论如何获取当前位置:Get User's Current Location / Coordinates
答案 1 :(得分:3)
大多数情况下,您使用的是旧的sdk版本,请尝试升级。
注意:iOS版Places SDK的2.7.0版已于2019年1月29日弃用,并将于2019年7月29日关闭。iOS版Places SDK的新版本现已推出。我们建议尽快更新到新版本。有关详细信息,请参阅迁移指南。
pod ‘GooglePlaces’, ‘= 3.1.0’
pod ‘GooglePlacePicker’, ‘= 3.1.0’
pod ‘GoogleMaps’, ‘= 3.1.0’
答案 2 :(得分:2)
当我将Pod文件上的GooglePlaces,GooglePlacePicker和GoogleMaps SDK从2.7.0升级到3.0.3时,我的工作正常了
source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '9.0'
use_frameworks!
target 'ProjectName' do
pod 'GooglePlaces', '= 3.0.3'
pod 'GooglePlacePicker', '= 3.0.3'
pod 'GoogleMaps', '= 3.0.3'
end
$ pod update
因此,如果您确定已经在Google控制台上启用了Google Places API,则更新pod文件中的版本可能会有所帮助。
答案 3 :(得分:1)
这是GooglePlaces 2.5.0版本的问题。
我尚未更新本地Pod存储库,因此默认版本为2.5.0。运行pod repo update
后,版本3.0.3可以正常工作。
答案 4 :(得分:0)
转到https://console.cloud.google.com/apis/library
(确保您位于正确的项目上,在左上方列出)
搜索并选择:“ iOS的Places SDK”。
点击“启用”按钮。