Tuesday, July 26, 2016

Swift Request for Authorization

* Photos
func requestForAccessPhotos(view : UIViewController, completionHandler: (accessGranted: Bool) -> Void){
        let authorizationStatus = PHPhotoLibrary.authorizationStatus()
        
        switch authorizationStatus {
        case .Authorized:
            completionHandler(accessGranted: true)
        case .Denied, .NotDetermined:
            PHPhotoLibrary.requestAuthorization() {(status) -> Void in
                switch status {
                case .Authorized:
                    completionHandler(accessGranted: true)
                case .Denied, .Restricted:
                    dispatch_async(dispatch_get_main_queue(), { () -> Void in
                        Handler().permissionAlert(view, title: "Access Denied", message: "Please allow the app to access your photos through the Settings.")
                    })
                default:
                    completionHandler(accessGranted: false)
                }
            }
        default:
            completionHandler(accessGranted: false)
        }
    }


* Contacts
func requestForAccessContacts(view : UIViewController, completionHandler: (accessGranted: Bool) -> Void) {
        let authorizationStatus = CNContactStore.authorizationStatusForEntityType(CNEntityType.Contacts)
        
        switch authorizationStatus {
        case .Authorized:
            completionHandler(accessGranted: true)
            
        case .Denied, .NotDetermined:
             contactStore.requestAccessForEntityType(CNEntityType.Contacts, completionHandler: { (access, accessError) -> Void in
                if access {
                    completionHandler(accessGranted: access)
                }
                else {
                    if authorizationStatus == CNAuthorizationStatus.Denied {
                        dispatch_async(dispatch_get_main_queue(), { () -> Void in
                            Handler().permissionAlert(view, title: "Access Denied", message: "Please allow the app to access your contacts through the Settings.")
                        })
                    }
                }
            })
            
        default:
            completionHandler(accessGranted: false)
        }
    }


* Photos
func requestForAccessCalendar(view : UIViewController, send : UISwitch, completionHandler : (accessGranted : Bool) -> Void){
        let authorizationStatus = EKEventStore.authorizationStatusForEntityType(EKEntityType.Event)
        
        switch authorizationStatus {
        case .Authorized:
            completionHandler(accessGranted: true)
        case .Denied, .NotDetermined:
            let eventStore = EKEventStore()
            eventStore.requestAccessToEntityType(EKEntityType.Event, completion: { (access, accessError) -> Void in
                if access {
                    completionHandler(accessGranted: access)
                }
                else {
                    if authorizationStatus == EKAuthorizationStatus.Denied {
                        dispatch_async(dispatch_get_main_queue(), { () -> Void in
                             Handler().permissionAlert(view, title: "Access Denied", message: "Please allow the app to access your calendar through the Settings.")
                            send.setOn(false, animated:true)
                        })
                    }
                }
            })
            
        default:
             completionHandler(accessGranted: false)
        }
        
    }


* Camera
func requestForAVCature(view : UIViewController, completionHandler : (accessGranted : Bool) -> Void){
        let authorizationStatus = AVCaptureDevice.authorizationStatusForMediaType(AVMediaTypeVideo)
      
        switch authorizationStatus {
        case .Authorized:
            completionHandler(accessGranted: true)
        case .Denied, .NotDetermined:
            AVCaptureDevice.requestAccessForMediaType(AVMediaTypeVideo, completionHandler: { (granted : Bool) -> Void in
                if(granted){ // Access has been granted ..do something
                    completionHandler(accessGranted: true)
                } else { // Access denied ..do something
                    if authorizationStatus == AVAuthorizationStatus.Denied {
                        dispatch_async(dispatch_get_main_queue(), { () -> Void in
                            Handler().permissionAlert(view, title: "Access Denied", message: "Please allow the app to access your calendar through the Settings.")
                        })
                    }
                }
            })

        default:
            completionHandler(accessGranted: false)
        }
        
    }


* Inside the 'Handler' class
func permissionAlert(view: UIViewController, title : String?, message : String?){
        let alertController = UIAlertController(title: title, message: message, preferredStyle: UIAlertControllerStyle.Alert)
        alertController.addAction(UIAlertAction(title: "Ok", style: UIAlertActionStyle.Default, handler: nil))
        
        view.presentViewController(alertController, animated: true, completion: nil)
    }

0 comments:

Post a Comment