我希望在iPhone的联系人有插入/更新事件时收到通知.
是否可以通过我的应用获取有关特定联系人更改事件的通知?
对于IOS Swift来说,只是一个新手......
我不期待完整的源代码.只是想知道它是否可能,也暗示.
提前致谢.
我的发现
我正在设计一个与我的后端同步联系的逻辑.我经历了一些在IOS中做同样事情的应用程序.我将以WhatsApp为例,我发现当我更新Native Addressbook中的任何联系人时,它反映了对Whatsapp的更改.
我的顾虑
我只是想知道它是如何以更快的方式同步的.即使是新的联系人也会与其远程服务器同步并在联系时显示,并且如果该号码已注册,则能够启动Whatsapp聊天.
查询摘要
所以,简而言之,我的疑问是,
我知道有以下的东西,
ABAddressBookGetPersonCount
ABAddressBookGetPersonWithRecordID
ABAddressBookCopyArrayOfAllPeople
Run Code Online (Sandbox Code Playgroud)
使用ABAddressBookGetPersonCount我可以知道是否有任何新的联系人,但仍然如何能够知道其记录ID,而无需使用迭代每个联系人ABAddressBookCopyArrayOfAllPeople
所以我只想问一下获得更新列表的方法.
我的应用程序需要在我们的服务器上存储用户的联系人(当然,在用户的许可下.)其中一个要求是将设备地址簿(添加/编辑/删除)的任何更改反映到服务器.
在重新启动应用程序之前,是否有一种简单的方法/最佳实践来确定哪些地址簿联系人已更改?
我只能看到回调方法来通知应用程序地址簿中的更改,但似乎没有记录的方法来确定添加,编辑或删除哪些联系人.
我现在想的是手动将新的联系人列表与存储在设备上的联系人列表进行比较,然后更新应用程序和服务器的更改.但我认为如果用户有大量的联系人可能会太多.
谢谢!
关于收听iOS地址簿更改回调,提出了许多SO问题.着名问题地址簿同步.
但我的问题很窄,即如何在地址簿同步回调期间删除哪些联系人被删除.
void MyAddressBookExternalChangeCallback (ABAddressBookRef ntificationaddressbook,CFDictionaryRef info,void *context)
{
NSLog(@"Changed Detected......");
/*
NSDate *lastSyncTime = [self gettingLastSyncTime];
// By above time, I could get which contacts are modified(kABPersonModificationDateProperty)
// and which contacts are created newly( ABRecordGetRecordID()
// But how can I get this contact was DELETED?
*/
}
Run Code Online (Sandbox Code Playgroud)
但有人在清理这个问题检测什么改变.......在这里,他们做了(a)第一次存储所有记录ID(b)在同步期间,检查所有存储的记录ID与当前地址簿ID,以检查它们是否可用.如果没有,则假设它被删除联系(昂贵的操作).
我的问题:还有其他方法来检测DELETED联系人吗?
objective-c addressbook abaddressbook ios abaddressbooksource