【问题标题】:Associating phones by phone numbers in Android, application architecture question在Android中通过电话号码关联电话,应用程序架构问题
【发布时间】:2011-04-03 17:01:10
【问题描述】:

我正在构建这个应用程序,它将在电话联系人列表中的用户之间建立关系。我现在处于用户安装此应用程序后,他/她将能够向联系人列表中的一个或多个人发送消息。如果联系人列表中的某个人没有安装我的应用程序,他/她将收到一条带有查看消息链接的纯文本消息,下载该应用程序以便消息开始进入应用程序,而不是通过短信,简单。如果他们确实安装了它,我需要发件人知道它并推送有关新消息的 C2DM 通知。我已经构建了所有应用程序功能,唯一剩下的就是这个关系片段......

我可以通过知道使用此电话号码的用户是否正在运行我的应用程序来做到这一点,然后将该号码与其他人的联系人列表交叉引用...但我需要处理国际号码,用户是否拥有“1” “在他们的数字前面(在美国),然后我们在欧洲和其他地方有不同形式的数字......问题越来越多。例如,我在美国,如果我在欧洲的联系人列表中有一个朋友,我手机上的他的号码将包含一些国家/地区代码,而他手机上存储的号码则不会。我遇到了验证用户身份的问题。如果我通过电话号码来保证唯一性,则可能存在欺骗问题。我可以通过从应用程序向我的服务器发送短信来验证电话号码,是否足够安全?

底线是:我需要该应用程序知道我的一个联系人安装了相同的应用程序,而无需发送邀请、接受等。可能是我想多了,也可能没办法……

非常欢迎和赞赏您的想法和建议。

谢谢,周末愉快:)

【问题讨论】:

    标签: android architecture


    【解决方案1】:

    统计和启发式救援:

    许多电话(或所有电话?- 我不确定)上的来电显示基于号码的最后 6 或 7 位数字。虽然这不是完全唯一的号码(包括国际和区号),但对于特定人的联系人来说,它具有足够独特的可能性非常高。这是一个典型的案例,理论上你可能是错的,但实际上你几乎从来没有错。实践中的错误数量非常少,以至于您甚至没有意识到它们可能发生的事实......

    我认为您可以使用相同的启发式方法并安全地假设在您的应用程序的早期生命周期中,您的数据库中的两个人的电话号码最后 7 位数字相同的可能性很小足够不重要。

    您可以通过定期查询轻松监控您的数据库中是否存在冲突 - 最后 7 位数字相同的人(我会手动进行 - 比如说每周一次,而不是现在自动化)。这个想法是找出您的用户群何时最终增长到足以引发此类冲突。您只想花时间处理离开理论领域的问题...

    进入此阶段后,您可以根据用户地理位置添加更多启发式方法 - 对于大多数人来说,他们的大多数联系人都在同一个国家和地区,因此如果有疑问,请根据原始用户做出决定用户所在的位置基于他们自己的电话号码。虽然不是完整的证据,但它很可能在大多数情况下都有效。

    您可以使用的另一种启发式方法是基于社交图谱 - 我的联系人之间很可能相互关联。因此,如果我的联系人列表中的一个号码可能属于您数据库中的两个不同的人,请检查我的联系人列表中已经是您的用户的其他人在他们的联系人列表中是否也有相同的号码,并且更喜欢联系更紧密的个人对我来说。

    最后,对于您不确定的少数情况,您可以在安全方面犯错(即忽略该数字),或者让您的应用程序询问用户。在每个用户的基础上,这可能会在极少数情况下发生,因此您的用户不太可能因为您对他们的窃听而生气。

    【讨论】:

    • 感谢@Elad,很高兴看到我们的想法相同。在我的问题解决思维中​​,我实际上更喜欢启发式方法,但由于我的场景的“全局性”,我对这个案例不太确定,但你的建议确实有道理。您对我问题的第二部分的建议是,实际上确保该号码实际上属于用户,我已经看到应用程序向“服务器”发送自动短信,这是个好主意吗?我不知道从设备读取它是否足够安全。还有其他方法吗?我应该担心下面@Bernd 的帖子中的国际数字吗?
    • 我不确定向服务器发送短信是否是个好主意,因为运营商可能会向用户收取费用,并且无论如何您都需要额外的权限,这可能会减少您的转化率。
    • 根据用户所在国家/地区将数字转换为国际形式只是一种启发式形式,就像我在上面的回答中提到的那样。我认为为了能够正确地解决这个问题,您需要收集一些真实的用户数据。一旦您的数据库中有一些用户和他们的号码,您将更好地了解人们(更好:您的用户)如何将号码输入他们的电话簿,以及您需要对他们进行哪些转换才能处理所有不同的变化。
    • 你建议我用什么来确保我从设备上下来的电话号码是真实的,我们知道它可以被欺骗。
    【解决方案2】:

    将电话号码标准化以在国际范围内有效。

    在 GSM 中,国际电话号码以“+”开头,后跟国家/地区代码。

    如果您找到一个没有“+”的号码,请使用有关人员所在国家/地区的信息来转换号码。

    【讨论】:

    • 感谢@Bernd,但设备知道我在哪个国家/地区吗?它将如何在全球范围内做到这一点?大多数国家/地区以不同的格式存储数字?根据上面@Elad 的场景,这是否重要?
    猜你喜欢
    • 2011-07-23
    • 1970-01-01
    • 1970-01-01
    • 2011-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多