Request permissions again after user denies location services?

后端 未结 6 1587
耶瑟儿~
耶瑟儿~ 2020-12-05 02:43

I track the user\'s location and ask for permission when my load first loads using this:

locationManager.requestAlwaysAuthorization()
locationManager.startUp         


        
相关标签:
6条回答
  • 2020-12-05 02:47

    The OS will only ever prompt the user once. If they deny permission, that's it. What you can do is direct the user to the Settings for your app by passing UIApplicationOpenSettingsURLString to UIApplication's openURL: method. From there, they can re-enable location services if they wish. That said, you probably shouldn't be too aggressive about bugging them for the permission.

    0 讨论(0)
  • 2020-12-05 03:01

    You can have an alternate solution!! You can show your own alert with the better message which can convince your user to allow to receive push notifications for your app. If user allows, then only you show default permission alert for enable push notification otherwise if user disallows, don't show default alert in-fact, you can save corresponding flag in your database or NSUserDefaults and can ask user later on again and again on some events in your app.

    0 讨论(0)
  • 2020-12-05 03:01

    For the Health Kit api. Developers can simply add another permission into the readTypes Set<HKObjectType> and the user will be re-prompted to allow permissions. I'm not entirely sure if this works the same way with location services.

    0 讨论(0)
  • 2020-12-05 03:02

    You only get one chance. For the user to enable permissions after denying them, they have to go through the Settings app. See Requesting Permission to Use Location Services in CLLocationManager.

    0 讨论(0)
  • 2020-12-05 03:06

    The permission pop up only shows once. So we have to redirect users to Settings after that. Here comes the code in Swift:

     import CoreLocation 
     @IBAction func userDidClickButton(_ sender: Any) {
    
        // initialise a pop up for using later
        let alertController = UIAlertController(title: "TITLE", message: "Please go to Settings and turn on the permissions", preferredStyle: .alert)
        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 })
             }
        }
        let cancelAction = UIAlertAction(title: "Cancel", style: .default, handler: nil)
        alertController.addAction(cancelAction)
        alertController.addAction(settingsAction)
    
        // check the permission status
        switch(CLLocationManager.authorizationStatus()) {
            case .authorizedAlways, .authorizedWhenInUse:
                print("Authorize.")
                // get the user location
            case .notDetermined, .restricted, .denied:
                // redirect the users to settings
                self.present(alertController, animated: true, completion: nil)
        }
    }
    
    0 讨论(0)
  • 2020-12-05 03:06

    I have created the library that include permission manager for notification which handle the permission alert even after user decline the permission.

    https://github.com/CrazyPro007/PermissionManager/tree/master/PermissionManager/PermissionManager

    0 讨论(0)
提交回复
热议问题