简体   繁体   English

Google Maps iOS SDK

[英]Google Maps iOS SDK

This is my code 这是我的代码

import UIKit    
import GooglePlaces  
import GoogleMaps  
@UIApplicationMain  

class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

   GMSPlacesClient.provideAPIKey("************************")
   GMSServices.provideAPIKey("************************")

    return true
}

but I'm still getting the exception 但我仍然有例外

Terminating app due to uncaught exception 'GMSServicesException', reason: 'Google Maps SDK for iOS must be initialized via [GMSServices provideAPIKey:...] prior to use' 由于未捕获的异常“ GMSServicesException”而终止了应用程序,原因:“使用前必须通过[GMSServices offerAPIKey:...]初始化iOS版Google Maps SDK”

Is there any other cause, help me to fix it. 还有其他原因,请帮我解决。

ViewController class is calling before appDelegate. ViewController类在appDelegate之前调用。 So, the APIKey was not initiated. 因此,未启动APIKey。 After finding this I initiate the viewController in appDelegate. 找到这个之后,我在appDelegate中启动viewController。

You must add API Key in App delegate and implement GoogleMap delegate in ViewController 您必须在App委托中添加API密钥,并在ViewController中实现GoogleMap委托

import UIKit
import GoogleMaps

let googleApiKey = "<YOUR API Key HERE>"

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?


    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        GMSServices.provideAPIKey(googleApiKey)
        return true
    }
//other methods
}

and your ViewController should be like 和你的ViewController应该像

import UIKit
import GoogleMaps

class ViewController: UIViewController, CLLocationManagerDelegate {

    private let locationManager = CLLocationManager()
    @IBOutlet weak var mapView: GMSMapView!

    override func viewDidLoad() {
        super.viewDidLoad()
        locationManager.delegate = self
        locationManager.requestWhenInUseAuthorization()
    }

    // MARK: - CLLocationManagerDelegate
    func locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) {

        guard status == .authorizedWhenInUse else {
            return
        }
        locationManager.startUpdatingLocation()
        mapView.isMyLocationEnabled = true
        mapView.settings.myLocationButton = true
    }

    func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {

        guard let location = locations.first else {
            return
        }

        mapView.camera = GMSCameraPosition(target: location.coordinate, zoom: 15, bearing: 0, viewingAngle: 0)
        locationManager.stopUpdatingLocation()
    }
}

PS : Make sure you don't forget these important steps. PS :请确保您不要忘记这些重要步骤。

  1. Go to Google Developers Console and create app and API Key 转到Google Developers Console并创建应用和API密钥
  2. Enable APIs for Google Maps SDK for iOS 为iOS的Google Maps SDK 启用API
  3. Add privacy permissions in .Plist file .Plist文件中添加隐私权限

<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
    <string>Application requires user’s location information while the app is running in the foreground.</string>
    <key>NSLocationAlwaysUsageDescription</key>
    <string>Will you allow this app to always know your location?</string>
    <key>NSLocationWhenInUseUsageDescription</key>
    <string>Do you allow this app to know your current location?</string>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM