Exception on API Key of Google Maps API for iOS



我正在开发使用谷歌地图API的iOS应用程序。我为我的项目安装了CocoaPod,并根据Google Developer的教程进行了配置。但是,当我运行我的项目时,它显示

***由于未捕获异常'GMSServicesException'而终止应用程序,原因:'Google Maps SDK for iOS必须>通过[GMSServices provideAPIKey:…]使用

但是我已经调用了"GMSServices"。AppDelegate.swift上的provideAPIKey。代码如下:

....
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
    GMSServices.provideAPIKey("***********************")
    return true
}
....

(**************)是我的API Key。

并且因为Google Maps API使用Objective C,所以我创建了一个桥接头来导入库。

我试图在[application:didFinishLaunchingWithOption]上设置断点。但是它会在运行这个函数之前引发异常,我认为这是非常奇怪的。

我很困惑。

问题终于解决了,原因是我在一个模型类中使用Google Maps库初始化了一个字段,它将在应用程序运行之前创建。所以这个错误发生了。当我将这个变量移到方法中时,问题就解决了。下面是导致错误的代码:

class PlaceManager {
    let placeClient = GMSPlacesClient()
    ...
    func getSuggestions(queryString:String) -> [String]{
        ...
    }
}

class PlaceManager {
    func getSuggestions(queryString:String) -> [String]{
        let placeClient = GMSPlacesClient()
        ...
    }
}

代替didFinishLaunchingWithOptions,将调用移动到willFinishLaunchingWithOptions。这个方法在状态恢复发生之后,但在你的应用的窗口和其他UI被呈现之前被调用。(在您的情况下,可能是使用Google Map API的UI)

func application(application: UIApplication, willFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
    // Override point for customization after application launch.
GMSServices.provideAPIKey("***********************")
    return true
}

我刚刚遇到了同样的问题。我创建了一个GMSMapView对象,它在api键可以被读取之前被初始化。所以我把它移到viewDidLoad方法中,问题就解决了。

:

class ViewController: ..... {
let mapView = GMSMapView()
:后

class ViewController: ..... {
var mapView : GMSMapView?
override viewDidLoad(){
    mapView = GMSMapView()

最新更新