iOS 通讯录备份、恢复

本文介绍了如何在iOS上实现通讯录的备份和恢复功能,重点讨论了权限申请、地址簿操作以及恢复策略。在iOS7以后,访问通讯录需要用户授权。代码示例展示了在确保权限正常的情况下进行AddressBook操作,以及服务端与客户端数据同步的简化方案。
摘要由CSDN通过智能技术生成

        和相册 备份一样,公司产品备份功能有通讯录备份 功能,自然也有通讯录恢复了。iOS通讯录相关操作,iOS对通讯录的操作离不开的框架:

#import <AddressBook/AddressBook.h>
#import <AddressBookUI/AddressBookUI.h>
        iOS提供给我们了通讯录的相关信息,也给我们提供了简单的通讯录的控制器、UI,但是可定制的部分较少,一般不用他的UI,我们就不多讲他提供的UI部分。(大概也就能改个颜色,组件 什么的,导航栏颜色等)。

        说道通讯录的使用,我们还是先来说权限的问题,iOS7之前这些是不需要申请用户权限的,但是iOS7之后,苹果开始注重用户的隐私。如:相册,通讯录,地理位置等信息都是需要得到用户的许可的。

        首先要申请用户权限。

- (void)viewDidLoad {
    [super viewDidLoad];
    
    self.view.backgroundColor=[UIColor colorWithRed:248.0/255.0 green:248.0/255.0 blue:248.0/255.0 alpha:1.0];
    self.title=@"通讯录同步";
    [self initView];
    [self addRightBarItem];
    CFErrorRef error=NULL;
    //请求权限
    ABAddressBookRef addressBook=ABAddressBookCreateWithOptions(NULL, &error);
    ABAddressBookRequestAccessWithCompletion(addressBook, ^(bool granted, CFErrorRef error) {
    });
    if (error==NULL) {
        CFRelease(addressBook);
    }
    
    
}
获得用户权限后,才能对AddressBook做相关操作。

但是要注意的是,即使获得了权限,用户还可以在设置中把咱们的权限关掉。所以每次对AddressBook的操作前要检查下权限是否正常。

//检测授权状态
+(BOOL)checkAuthorizationStatus{
    if (ABAddressBookGetAuthorizationStatus()!=kABAuthorizationStatusAuthorized) {
        return NO;
    }else{
        return YES;
    }
}

接下来 获得所有的通讯录数据

-(NSMutableArray *)getLocationAllPeople{
    [self.allPeople removeAllObjects];
    if (![JYAddressBookSyncManager checkAuthorizationStatus]) {
        return self.allPeople;
    }else{
        
        if (ABAddressBookGetAuthorizationStatus()!=kABAuthorizationStatusAuthorized) {
        }else{
        }
        CFErrorRef error = NULL;
        ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, &error);
        CFArrayRef results = ABAddressBookCopyArrayOfAllPeople(addressBook);
        for (int i = 0; i<CFArrayGetCount(results); i++) {
            ABRecordRef person = CFArrayGetValueAtIndex(results, i);
            Person * people = [[Person alloc]init];
            people.id = ABRecordGetRecordID(person);
            people.first_name = CFBridgingRelease(ABRecordCopyValue(person, kABPersonFirstNameProperty));
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值