适用于iOS的Google Maps API API密钥的例外情况
我正在使用适用于IOS的Google Maps API开发iOS应用。 我为我的项目安装了CocoaPod并根据Google Developer上的教程进行配置。 但是,当我运行我的项目时,它说
***由于未捕获的exception’GMSServicesException’而终止应用程序,原因是:’Google Maps SDK for iOS必须>在使用之前通过[GMSServices provideAPIKey:…]进行初始化
但我已经在AppDelegate.swift上调用了“GMSServices.provideAPIKey。以下是代码:
.... func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { GMSServices.provideAPIKey("***********************") return true } ....
(**************)是我的API密钥。
由于Google Maps API使用Objective C,因此我创建了一个桥接头来导入库。
我试图在[application:didFinishLaunchingWithOption]上设置断点。 但它会在运行该函数之前引发exception,我认为这很奇怪。
对此感到困惑。 提前致谢。
问题最终解决了,原因是我在一个模型类中使用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()