我正在构建这个应用程序,它将在手机的联系人列表中发展用户之间的关系。我现在处于用户安装此应用程序的位置,他/她将能够从联系人列表向一个或多个人发送消息。如果来自联系人列表的人没有安装我的应用程序,他/她将获得带有链接的纯文本消息以查看消息,下载应用程序以使消息开始进入应用程序而不是短信,简单。如果他们安装了它,我需要发件人知道它并推送有关新消息的C2DM通知。我已经构建了所有应用程序功能,唯一剩下的就是这段关系......
我可以通过了解具有此电话号码的用户是否正在运行我的应用程序,然后与其他人联系人列表交叉引用该号码来实现此目的...但我需要处理国际号码,用户是否拥有“1” “在他们的数字(在美国)面前,我们在欧洲和其他地方有不同形式的数字......问题在增长。例如,我在美国,如果我在欧洲的联系人列表中有一位朋友,他的电话号码将包含一些国家代码,其中存储在手机上的号码不会。我遇到了验证用户身份的问题。如果我通过保证唯一性的电话号码,可能会有一个欺骗它的问题。我可以通过从应用程序向我的服务器发送短信来验证电话号码,这样安全吗?
底线是:我需要应用程序知道我的一个联系人安装了相同的应用程序而没有发送邀请,接受等。也许我过度思考这个问题,或者也许没有办法做到这一点......
您的想法和建议非常受欢迎和赞赏。
谢谢你,享受你的周末:)
答案 0 :(得分:1)
拯救的统计数据和启发式方法:
许多手机上的来电显示(或所有手机? - 我不确定)是基于该号码的最后6位或7位数。虽然这不是普遍唯一的完全限定号码(包括国际和地区代码),但它对于特定人的联系人来说具有足够独特性的可能性极高。这是一个经典案例,理论上你可能是错的,但在实践中你几乎从来都不是。在实践中错误的数量是如此之小,以至于你甚至不知道它们可能发生的事实......
我认为您可以使用相同的启发式并安全地假设在应用程序的早期阶段,您的数据库中两个人的电话号码中相同的最后7位数的几率很小足够不重要。
您可以通过定期查询(我会手动执行 - 比如每周一次,而不是现在自动执行此操作)来轻松监控数据库中的冲突 - 具有相同后7位数的人。我们的想法是找出你的用户群何时最终成长到足以引起这种冲突。当你离开理论领域时,你只想花时间处理问题......
一旦你进入这个阶段,你可以根据用户地理位置添加更多的启发式方法 - 对于大多数人来说,他们的大部分联系人都在同一个国家/地区和相同的区号中,所以当您对原始版本的决定有疑问时用户的地点基于他们自己的电话号码。虽然不是完全证据,但它很可能适用于大多数情况。
您可以使用的另一种启发式方法是基于社交图 - 我的联系人可能会在他们之间建立联系。因此,如果我的联系人列表中的某个号码可能属于您数据库中的两个不同的个人,请检查我的联系人列表中已经是您的用户的其他人是否也在其联系人列表中具有相同的号码,并且更喜欢更紧密连接的个人对我来说。
最后,对于您不确定的少数情况,您可以在安全方面犯错(即忽略该号码)或者让您的应用程序询问用户。在每个用户的基础上,这很可能在很少的情况下发生,所以它不太可能让你的用户因为窃听他们而生气。
答案 1 :(得分:0)
将电话号码规范化为国际有效。
在GSM中,国际电话号码以“+”开头,后跟国家/地区代码。
如果您找到没有“+”的号码,请使用有关该国家/地区的信息来转换该号码。