iOS kABPersonModificationDateProperty的奇怪行为似乎一直在更新

我在使用ABAddressBook库的iOS应用程序中看到了非常奇怪的行为.想知道是否有人能够让我对背景中发生的事情有所了解,或者我是否有逻辑错误,我就是看不到.

长话短说我正在制作一个VOIP应用程序,它严重依赖于导入用户的联系人.我保留了这些的在线备份,这些备份也与推送通知一起使用.

由于它们在手机上被修改,我需要向服务器发送更新请求以保持其准确性.问题是许多用户设备经常以随机的间隔向具有非常大的联系人块的服务器发送垃圾邮件.有一天它会有50个联系人,5分钟后会有10个联系人,然后一个月就会更新一个.我问过一些用户是朋友,他们不记得过夜修改了一半的地址簿.

我的代码非常简单,每当我需要向服务器发送更新时,我都存储一个NSDate,例如添加,修改或删除.我知道有一个回调会在地址簿更新时触发,但这需要始终在内存中保留对地址簿的引用.我做了一些测试,如果应用程序崩溃或用户杀死应用程序,我将丢失任何更新.鉴于其背景运行VOIP应用程序,我觉得有可能人们会在节省电池或其他任何事情时杀死它.因此,我循环遍历所有联系人,检查kABPersonModificationDateProperty属性对照我记录的最后一个NSDate.如果修改后更新,我会开始更新,就像这样.

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setTimeStyle:NSDateFormatterMediumStyle];
[dateFormatter setDateStyle:NSDateFormatterMediumStyle];

NSDate *lastChecked = [dateFormatter dateFromString:[PListData readStringFromFile:@"lastContactsArchive"]];


CFDateRef modifyDate = ABRecordCopyValue(ref, kABPersonModificationDateProperty);
...
...
else if ([(__bridge NSDate*)modifyDate compare:lastChecked]==NSOrderedDescending) // if modified after last check, create new contact and update
{
   ...
}

是否有我遗漏的内容,修改日期是否仅在更改名称/电话号码/电子邮件等时更新?例如,当iCloud同步时它们是否被修改?如果他们通过电话给这个人打电话,计数器会更新吗?等等

我已尝试在3部手机上进行调试,所有操作都符合我的预期.我真的在这里画一个空白,服务器对我不满意所以任何帮助将不胜感激.

最佳答案 当iphone与iCloud / CardDav / Gmail / Exchange帐户同步联系时,联系人也可能在后台更新.

请注意,它也可能在您的应用运行时发生,因此您应订阅地址簿更新.

点赞