Read facebook and phone contacts with permission

Contact

typealias CheckContactPermission = (Bool,ABAddressBook?) -> ()


func checkcontactpermission(pCompletionBlock:CheckContactPermission){
    // make sure user hadn't previously denied access
    
    let status = ABAddressBookGetAuthorizationStatus()
    if status == .Denied || status == .Restricted {
        //            Helper.showAlert(ALERTCONTACTPERMISIONDNIED, pobjView: self.view)
        // user previously denied, so tell them to fix that in settings
        return
    }
    // open it
    var error: Unmanaged?
    guard let addressBook: ABAddressBook? = ABAddressBookCreateWithOptions(nil, &error)?.takeRetainedValue() else {
        print(error?.takeRetainedValue())
        return
    }
    // request permission to use it
    
    ABAddressBookRequestAccessWithCompletion(addressBook) { granted, error in
        
        dispatch_async(dispatch_get_main_queue(),{
            if !granted {
                return
            }
            if granted{
            }
        })
        pCompletionBlock(granted,addressBook)
    }
}

func readFromAddressBook(addressBook: ABAddressBookRef){
    var arrContacts : [String] = []
    var arrEmails : [String] = []
    let allPeople = ABAddressBookCopyArrayOfAllPeople(addressBook).takeRetainedValue() as NSArray
    for person: ABRecordRef in allPeople{
        
        // Get all the phone numbers this user has /
        let unmanagedPhones = ABRecordCopyValue(person, kABPersonPhoneProperty)
        let phones: ABMultiValueRef =
            Unmanaged.fromOpaque(unmanagedPhones.toOpaque()).takeUnretainedValue()
                as NSObject as ABMultiValueRef
        var _phone: String = " -- "
        
        let  numberOfPhoneNumbers : CFIndex = ABMultiValueGetCount(phones)
        for i in 0 ..< numberOfPhoneNumbers {
            if((ABMultiValueCopyLabelAtIndex(phones, i)) != nil){
                let unmanagedPhone = ABMultiValueCopyValueAtIndex(phones, i)
                _phone = Unmanaged.fromOpaque(
                    unmanagedPhone.toOpaque()).takeUnretainedValue() as NSObject as! String
                arrContacts.append(_phone)
            }
        }
        
        let emailTemp = ABRecordCopyValue(person, kABPersonEmailProperty)
        let emails: ABMultiValueRef = Unmanaged.fromOpaque(emailTemp.toOpaque()).takeRetainedValue() as NSObject as ABMultiValueRef
        
        var _email: String = " -- "
        
        let  numberOfEmails : CFIndex = ABMultiValueGetCount(emails)
        for j in 0 ..< numberOfEmails {
            if((ABMultiValueCopyValueAtIndex(emails, j)) != nil) {
                let unmanagedEmail = ABMultiValueCopyValueAtIndex(emails, j)
                _email = (Unmanaged.fromOpaque(unmanagedEmail.toOpaque()).takeRetainedValue() as NSObject as! String).lowercaseString
                arrEmails.append(_email)
            }
        }
    }
    let dic = [kMobileNumbers:arrContacts,kEmails:arrEmails]
    let jsonData = try! NSJSONSerialization.dataWithJSONObject(dic, options: NSJSONWritingOptions.PrettyPrinted)
    let jsonString = NSString(data: jsonData, encoding: NSUTF8StringEncoding)! as String
    print(jsonString)
}

Facebook

typealias CheckFacebookPermission = (Bool,Bool) -> ()

func checkfacebookpermission(VC : UIViewController?, pCompletionBlock:CheckFacebookPermission){
    
    if FBSDKAccessToken.currentAccessToken() != nil{
        
        print("Already logged in.")
        pCompletionBlock(true,false)
    }
    else if VC != nil{
        
        print("Login to Facebook first.")
        
        let fbLoginManager: FBSDKLoginManager = FBSDKLoginManager()
        fbLoginManager.logOut()
        fbLoginManager.logInWithReadPermissions(["public_profile","email"], fromViewController: VC, handler: {(result: FBSDKLoginManagerLoginResult!, error: NSError!) -> Void in
            if error != nil{
                print("Error :- \(error)")
                pCompletionBlock(false,false)
            }
            else if (result?.isCancelled)!{
                print("Cancelled")
                pCompletionBlock(false,false)
            }
            else{
                print("Logged in")
                
                if (result?.grantedPermissions.contains("publish_actions"))!
                {
                    print("publish_actions permission granted")
                }
                
                dispatch_async(dispatch_get_main_queue(),{
                    pCompletionBlock(true,true)
                })
            }
        })
    }
    else{
        pCompletionBlock(false,false)
    }
}

func getFacebookFriends(pCompletionBlock:FacebookContactSync){
    FBSDKGraphRequest(graphPath: kFBFriend, parameters: [kFBFields: kFBRequiredFieldsFriends]).startWithCompletionHandler({(connection: FBSDKGraphRequestConnection!, result: AnyObject!, error: NSError!) -> Void in
        if error == nil{
            var arrFacebookFriends : [AnyObject] = []
            var dic : [String : AnyObject] = result as! [String : AnyObject]
            if result != nil{
                let data : [AnyObject] = dic[kDataKey] as! Array
                for dic in data{
                    arrFacebookFriends.append(dic)
                }
            }
            let jsonData = try! NSJSONSerialization.dataWithJSONObject(arrFacebookFriends, options: NSJSONWritingOptions.PrettyPrinted)
            let jsonString = NSString(data: jsonData, encoding: NSUTF8StringEncoding)! as String
            print(jsonString)
        }
    })
}

You may also like

Leave a Reply