想让大家帮忙想个逻辑
最近在用iphone上的某款程序,对其中的通讯录功能有点迷惑。避免广告嫌疑,程序名字用字母Z表示。1. Z程序里的通讯录跟用户手机的是同步的,当系统检测到用户A通讯录里的某个号码B也是Z的用户时,就会在Z程序内部通讯录该号码B后边加一个logo,表示这个人也在用。
2. 当用户A通讯录里的某个人B新注册成为这款程序的用户时,系统会给A的手机发Push提示,说用户B已经开始使用该程序。用户A只有已经是该程序的注册用户才会收到通知,如果A没有使用过该程序,则不会收到通知。对于以上两个功能怎样实现一直想不明白,我大体想的方法是:当用户A注册该程序时,程序会先读取用户的通讯录信息,并检查其中哪些人已经是注册用户,检查过后把用户A通讯录里的所有注册用户的号码储存到数据库里,假设数据库的表格中有两栏C1和C2,C1用来储存所有未注册过的号码,C2只储存注册过的号码。
储存过后在用户手机里生成一个本地文件用来储存C2里的号码,并且在程序内部的这些号码后边附加程序的logo。当用户打开程序时,程序会同步网上的数据库来更新这个本地文件以及数据库。但是自己又觉得自己想的不对,因为还有一种情况:
当发Push通知的时候,假设两个人A和B,A已经注册,B未注册,A的通讯录里有B,但是B的通讯录里没有A,当B注册时,系统会给A发Push通知,所以当发Push通知的时候系统不是查询数据库里B的数据,应该是查询别的,或者查询以上所述的数据库里所有用户的C1这一栏,如果C1中含有B的号码,则系统发送通知,并且把B的号码从C1移至C2?想了几天没想明白,希望高人指点或讨论。

解决方案 »

  1.   

    楼主 的思路是可行的,虽然 当数据量大了以后,查询负担会变大很多。
    但是我可以 提供另一种思路:服务器端的 数据库只存储所有已经注册过的用户。
    然后客户端作工作,比如,用户A 注册了以后,读取其通讯录里所有的用户,然后发送到服务器端,服务器端返回数据,告诉A用户哪些已经注册(对于已经注册用户加上标记,并加上logo),哪些还没注册(没注册的用户也做上未注册的标记); 然后 每隔一段时间客户端给服务器端发送一次通讯录,服务器端返回注册信息,客户端再判断下是否有用户从没注册变成了已经注册,如果有,则 弹出一个Push信息,告诉用户A :您通讯录里某某人也注册使用了该软件。
    不知这样回答,楼主可否满意
      

  2.   

       如楼上所说,不论A或者B的通讯录都要在用户授权下加密上传(同步)到服务器,然后在服务器进行匹配,然后推送,客户端再下载(同步)结果。然后进行展示。不要在客户端做轮循。
    比如
    用户             item1     item2     item3               是否使用
    A                   B            C           D                        Y 
    B                   D                                                   Y
    C                   A           B            D                       N
    D                   A           C            E                        N
    则当C用户注册成为用户时,这时候,就可以告诉A,C也开始使用了,告诉B,C可能是他走散多年的兄弟,option(短信告诉D你的好友都在使用)