将坐标存储到 Firebase 中的实时数据库

Posted

技术标签:

【中文标题】将坐标存储到 Firebase 中的实时数据库【英文标题】:Store coordinate to real time Database in Firebase 【发布时间】:2018-11-08 23:55:54 【问题描述】:

我正在尝试保存纬度。并且很长。到数据库。但是数据库没有显示任何内容,也没有在 Swift 中显示任何错误。我的代码如下所示。

override func viewDidLoad() 
    super.viewDidLoad()

    mapView.showsUserLocation = true

        if CLLocationManager.locationServicesEnabled() == true 
        if CLLocationManager.authorizationStatus() == .restricted || CLLocationManager.authorizationStatus() == .denied || CLLocationManager.authorizationStatus() == .notDetermined 
            locationManager.requestWhenInUseAuthorization()
        

    let userLatitude = locationManager.location?.coordinate.latitude
    let userLongtitude = locationManager.location?.coordinate.longitude
    let userTime = locationManager.location?.timestamp

    Auth.auth().createUser(withEmail: "test@gmail.com",password: "xxxx", completion: (User, error) in
        if error != nil 
            self.displayMyalertMessage(userMessage: error!.localizedDescription)
         else 
            print("Success")
        
        guard let uid = User?.user.uid else return
        let ref = Database.database().reference(fromURL:"")
        let userReference = ref.child("Locations").child(uid)

        let values = ["Latitude": userLatitude as Any, "Longtitude": userLongtitude as Any, "Time": UserTime as Any] as [String : Any]
        userReference.updateChildValues(values, withCompletionBlock:  (error, reference) in
            if error != nil 
                print(error as Any)
                return
            
        )   
    )

【问题讨论】:

【参考方案1】:
var locationManager = CLLocationManager()

func initiateLocation()

    locationManager.delegate = self
        locationManager.requestWhenInUseAuthorization()
        locationManager.desiredAccuracy = kCLLocationAccuracyBestForNavigation
        locationManager.distanceFilter = 100
        locationManager.startUpdatingLocation()
        locationManager.allowsBackgroundLocationUpdates = true

        //checkForLocationServices()
        checkLocationAuthorizationStatus()
    guard let myLatitude = locationManager.location?.coordinate.latitude else
        return
    
    guard let myLongitude = locationManager.location?.coordinate.longitude else
        return
    




func checkLocationAuthorizationStatus() 
    let status = CLLocationManager.authorizationStatus()
    if status == CLAuthorizationStatus.notDetermined
        print("NotDetermined")
        locationManager.requestWhenInUseAuthorization()
        CLLocationManager.locationServicesEnabled()
        locationManager.requestLocation()
    else 
        print("Problem with authorization")
    




// Handle incoming location events.
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) 
    let location: CLLocation = locations.last!
    print("Location: \(location)")
    updateMyLocationToDataBase()



// Handle authorization for the location manager.
func locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) 
    switch status 
    case .restricted:
        print("Location access was restricted.")
    case .denied:
        print("User denied access to location.")
        // Display the map using the default location.
    case .notDetermined:
        print("Location status not determined.")
    case .authorizedAlways: fallthrough
    case .authorizedWhenInUse:
        print("Location status is OK.")            
    


// Handle location manager errors.
func locationManager(_ manager: CLLocationManager, didFailWithError error: Error) 
    locationManager.stopUpdatingLocation()
    print("Error: \(error)")

    let appName = Bundle.main.object(forInfoDictionaryKey: "CFBundleDisplayName") as! String

    let msg :String = "You have denied the app to access your location. Please enable the location services in your settings for the app to get the location";
    let alertController = UIAlertController(title: "Allow \(appName) to access your location while you are using the app?", message: msg, preferredStyle: .alert)
    let cancelAction = UIAlertAction(title: "CANCEL", style: UIAlertActionStyle.default, handler: nil)

    let settingsAction = UIAlertAction(title: "SETTINGS", style: .default)  (_) -> Void in
        guard let settingsUrl = URL(string: UIApplicationOpenSettingsURLString) else 
            return
        

        if UIApplication.shared.canOpenURL(settingsUrl) 
            UIApplication.shared.open(settingsUrl, completionHandler:  (success) in
                print("Settings opened: \(success)") // Prints true
            )
        
    


    alertController.addAction(cancelAction)
    alertController.addAction(settingsAction)

    self.present(alertController, animated: true, completion: nil)

【讨论】:

以上是关于将坐标存储到 Firebase 中的实时数据库的主要内容,如果未能解决你的问题,请参考以下文章

SwiftUI - 将存储中图像文件的路径移动到 Firebase 上的实时数据库 [重复]

Firebase 存储 - 将图像上传到 Firebase 存储并在实时数据库中创建指向该图像的链接

如何使用 Flutter 将复杂的 JSON 数据存储到 Firebase 实时数据库中

Angular Firebase 存储,将用户输入属性分配给实时数据库

使用 Firebase 实时数据库和 React 将图像上传给用户 [重复]

已实现 Firebase 实时数据库存储的 Android 应用中的多个应用内产品