iOS 版 Google 地图 API 的 API 密钥异常

问题描述 投票:0回答:4

我正在使用适用于 IOS 的 Google 地图 API 开发 iOS 应用程序。我为我的项目安装了 CocoaPod,并根据 Google Developer 上的教程进行配置。然而,当我运行我的项目时,它说

*** 由于未捕获的异常“GMSServicesException”而终止应用程序,原因:“iOS 版 Google 地图 SDK 必须在使用前通过 [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,所以我创建了一个 Bridging Header 来导入该库。

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

对此很困惑。预先感谢。

ios swift google-maps api-key
4个回答
5
投票

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

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

之后

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

3
投票

将调用移至 willFinishLaunchingWithOptions,而不是 didFinishLaunchingWithOptions。在状态恢复发生之后但在呈现应用程序的窗口和其他 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
}

2
投票

我也遇到了同样的问题。我创建了一个 GMSMapView 对象,并在可能读取 api 密钥之前对其进行了初始化。所以我将它移到 viewDidLoad 方法中并解决了问题。

之前:

class ViewController: ..... {

let mapView = GMSMapView()

之后:

class ViewController: ..... {

var mapView : GMSMapView?

override viewDidLoad(){
    mapView = GMSMapView()

0
投票

在你的 appDelegate.m 的 didFinishLaunchingWithOptions 中添加这些 GMSService 行和 api 密钥,对我来说它有效。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
  [GMSServices provideAPIKey:@"**************"];
  [FIRApp configure];
}

并在顶部添加此导入

#import <GoogleMaps/GoogleMaps.h>
© www.soinside.com 2019 - 2024. All rights reserved.