未启用 iOS 版 Places API

Posted

技术标签:

【中文标题】未启用 iOS 版 Places API【英文标题】:The Places API for iOS is not enabled 【发布时间】:2016-10-06 18:55:48 【问题描述】:

我正在尝试将当前用户位置上传到 Parse,但是我无法检索当前用户位置。我正在按照这里的教程进行操作,并直接从那里复制了所有必要的代码,但是我收到了错误:当前位置错误:操作无法完成。。请参阅开发者指南 (https://developers.google.com/places/ios/start),了解如何启用 iOS 版 Google Places API。

下面是我的以下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")
                
            
        
    


【问题讨论】:

您是否对 info.plist 文件进行了必要的更改? 您是否从 google 的控制台启用了 google place api? 【参考方案1】:

按照这些步骤在 Google Developers Console 上的项目中启用 Google Places API for iOS 和适用于 iOS 的 Google Maps SDK。如果您的项目还没有 iOS 密钥(一种 API 密钥),这些说明还可以帮助您创建新的 API 密钥。

转到 Google Developers Console。 创建或选择一个项目。 点击继续以启用 iOS 版 Google Places API 和 iOS 版 Google Maps SDK。 在凭据页面上,获取 iOS 密钥并设置 API 凭据。注意:如果您有现有的 iOS 密钥,则可以使用该密钥。您可以对同一项目中的任何 iOS 应用程序使用相同的密钥。 在出现提示时输入您的应用程序包标识符。例如:com.example.hello-places。

点击创建。您的新 iOS 密钥将出现在您项目的 API 密钥列表中。 API 密钥是一串字符,如下所示:

AIzaSyBdVl-cTICSwYKrZ95SuvNw7dbMuDt1KG0

注意: 您需要在 Google 开发者控制台中启用地图服务。在新布局中,选择左侧列中的 APIs & auth 部分和 APIs 子项。接下来,在右侧通过单击关闭按钮启用 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

【讨论】:

我已经完成了所有这些,但我仍然得到“iOS 的 Places API 未启用”。 API 肯定是启用的。它是为 iOS 设置的。不知道该怎么办。 我在这里遇到了同样的问题.. Places API 已启用,但仍然与您遇到的错误相同。我被卡住了 我已经从控制台启用了 placesAPI,但我仍然收到此错误 NSLocalizedDescription=Places SDK for iOS 之前没有在项目 110476576428 中使用过,或者它已被禁用。如果有人有解决方案,请在这里分享@OliverDixon 我已经从控制台启用了 placesAPI,但我仍然收到此错误 NSLocalizedDescription=Places SDK for iOS 之前没有在项目 110476576428 中使用过,或者它已被禁用。如果有人有解决方案,请在此处分享或发布答案。 @mehmetsen80 看起来SDK for iOS的地方有一个错误:-|使用密钥进行香草 GET 请求。所以我不再使用 SDK。【参考方案2】:

大多数情况下,您使用的是旧的 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’

【讨论】:

好人!我也在寻找同样的东西,该死,这行得通。【参考方案3】:

当我在 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 文件中的版本可能会有所帮助。

【讨论】:

@AbiramiBala 当您降级并声明此处确实存在的东西时,请三思。转到cocoapods.org,然后输入 Google Place,您将看到 Google Place Picker、GooglePlaces、Google Maps 的所有 3.0.3 版本 但是当我尝试通过“pod update”进行更新时,它只会更新到 2.7。当我尝试像您的代码一样更新 pod 时,它会出现错误,例如 -> CocoaPods 找不到 pod “GoogleMaps”的兼容版本:在 Podfile:GoogleMaps (= 3.0.3)。注意:我没有投反对票 @AbiramiBala 确保你也更新你的 pod.. sudo gem install cocoapods 再次更新同样的错误,cocoapods 无法兼容谷歌地图的版本。在你回答之前检查两次......! @AbiramiBala 你在降低我的回答,我仍然试图给你选择,那么你仍然在讽刺。祝你好运。【参考方案4】:

这是 GooglePlaces 2.5.0 版本的问题。

我没有更新我的本地 pod 存储库,所以默认版本是 2.5.0。运行pod repo update 后,3.0.3 版本运行。

【讨论】:

【参考方案5】:

转到https://console.cloud.google.com/apis/library

(确保您在正确的项目上,在左上角列出)

搜索并选择:“Places SDK for iOS”。

点击“启用”按钮。

【讨论】:

以上是关于未启用 iOS 版 Places API的主要内容,如果未能解决你的问题,请参考以下文章

如何在 iOS 版 Google Places API 中查找当前用户位置

适用于 android 的 Google 地图和 Places SDK 在发行版 APK 中不工作

如何为 Google Places API 启用 CORS

android studio log errr Places API for Android 似乎没有为您的应用启用。它打开和关闭

iOS 测试中未启用后台模式

iOS 8 GPS 未启用