Skip to content

Instantly share code, notes, and snippets.

@vikdenic
Created June 17, 2015 20:18
Show Gist options
  • Select an option

  • Save vikdenic/ebcbe16a4124a50f7773 to your computer and use it in GitHub Desktop.

Select an option

Save vikdenic/ebcbe16a4124a50f7773 to your computer and use it in GitHub Desktop.
Phone Phinding
@implementation ContactsManager
+(void)requestContactsAccess:(void (^)(BOOL success, ABAddressBookRef addressBook, CFErrorRef error))completionHandler
{
CFErrorRef error = NULL;
ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, &error);
ABAddressBookRequestAccessWithCompletion(addressBook, ^(bool granted, CFErrorRef error) {
if (!granted)
{
NSLog(@"Just denied");
completionHandler(NO, addressBook,error);
}
NSLog(@"Just authorized");
completionHandler(YES, addressBook, error);
});
}
+(void)listPeopleInAddressBook:(ABAddressBookRef)addressBook withCompletion:(void (^)(NSArray *numbers))completionHandler
{
NSMutableArray *numbersArray = [NSMutableArray new];
NSArray *allPeople = CFBridgingRelease(ABAddressBookCopyArrayOfAllPeople(addressBook));
NSInteger numberOfPeople = [allPeople count];
for (NSInteger i = 0; i < numberOfPeople; i++) {
ABRecordRef person = (__bridge ABRecordRef)allPeople[i];
ABMultiValueRef phoneNumbers = ABRecordCopyValue(person, kABPersonPhoneProperty);
CFIndex numberOfPhoneNumbers = ABMultiValueGetCount(phoneNumbers);
for (CFIndex i = 0; i < numberOfPhoneNumbers; i++)
{
NSString *phoneNumber = CFBridgingRelease(ABMultiValueCopyValueAtIndex(phoneNumbers, i));
NSString *trimmedNumber = [[phoneNumber componentsSeparatedByCharactersInSet:
[[NSCharacterSet decimalDigitCharacterSet] invertedSet]]
componentsJoinedByString:@""];
if ([trimmedNumber hasPrefix:@"1"] && [trimmedNumber length] > 1)
{
trimmedNumber = [trimmedNumber substringFromIndex:1];
}
[numbersArray addObject:trimmedNumber];
}
CFRelease(phoneNumbers);
}
completionHandler(numbersArray);
}
+(void)findProfilesFromNumbers:(NSArray *)numbers withCompletion:(void (^)(NSArray *profiles))completionHandler
{
// Using PFQuery
PFQuery *profileQuery = [PFQuery queryWithClassName:@"Profile"];
[profileQuery includeKey:@"user"];
[profileQuery findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
NSMutableArray *matches = [NSMutableArray new];
for (Profile *profile in objects)
{
if ([numbers containsObject:profile.phoneNumber])
{
[matches addObject:profile];
}
}
completionHandler(matches);
}];
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment