ant*_*ntf 3 iphone networking client-server addressbook ios
我正在编写一个应用程序,我需要将所有地址簿内容(即名称和数字)发送到服务器上,在服务器上进行交叉,以通知用户他的联系人中的哪些朋友在他们的设备上安装了此应用程序(类似于现今大多数通信应用程序的东西).我的问题不在于如何做到这一点的概念,我的问题在于客户端和服务器之间的速度和同步.
要从通讯簿中检索姓名和号码,我会做一个简单的循环并将答案存储在NSMutableArray
如下:
for(CFIndex i=0; i< CFArrayGetCount(peopleMutable); i++)
{
record = CFArrayGetValueAtIndex(peopleMutable, i);
multi = ABRecordCopyValue(record, kABPersonPhoneProperty);
//Contact ID
contactID = (int)ABRecordGetRecordID(record);
//Full Name
fullName = [NSString stringWithFormat:@"%@ %@", (NSString *)ABRecordCopyValue(record, kABPersonFirstNameProperty), (NSString *)ABRecordCopyValue(record, kABPersonLastNameProperty)];
int multiCount = ABMultiValueGetCount(multi);
for(CFIndex j=0; j<multiCount; j++)
{
number = (NSString *)ABMultiValueCopyValueAtIndex(multi, j);
[arrayNamesToSend addObject:[NSString stringWithFormat:@"%u;%@;%@;", contactID, fullName, number];];
}
}
Run Code Online (Sandbox Code Playgroud)
那么这个循环在大约一秒钟内完成(即使你有超过1000个接触,最多2秒).让我们来谈谈一个普通的案例:平均而言,地址簿中可能有500个名字,每个名字平均长度为15个字符,每个电话号码平均为15个字符(国际格式),因此这导致一共有15,000个字符要发送到服务器.根据我在客户端服务器编程方面的谦虚知识,不建议在一条消息中从客户端向服务器发送大量字节,建议的大小在每条消息的1024到4096字节之间.
现在我如何将这些联系人发送到服务器?我想到了:
有关如何解决此问题的任何建议?有没有办法将整个通讯簿作为一个文件上传到服务器,然后服务器将解决它并完成其工作?提前谢谢了.
这是一个非常糟糕的想法.您通过向服务器发送通讯簿数据来违反各种隐私问题.而且,你不需要它.你应该做的是散列你关心的所有数据(使用像SHA1这样的东西,或者为了安全起见HMAC)并将散列发送到服务器.您可以使用哈希值进行比较,就像使用原始数据一样,但这样您就不会将实际的个人数据发送到服务器时存在严重的隐私问题.
无论如何,您的实际问题是将大量数据发送到服务器.我认为你的担忧是没有道理的.将所有数据作为一条"消息"发送有什么问题?听起来你只有15kB左右的数据.那真的不是那么大.如果您要将单个图像发送到服务器,那么您将超过该大小.