-1

我正在开发想要跟踪在线用户的 android 应用程序。当用户安装应用程序时,他提供了他的号码和国家代码,我们使用该号码注册用户。现在,每当他启动应用程序时,他都会将所有移动联系人的列表发送到服务器以查找谁在线。

这种方法的问题是相同的手机号码可以采用不同的格式,例如

  • +91 9665123456
  • 91 9665123456
  • 0 9665123456
  • 9665123456

让我们假设在注册用户 A 时给了号码 +91 9665123456,我们注册用户并在应用程序运行时使其在线。
但是在用户B手机中,他的号码存储为09665123456,我需要查询用户A是否在线,但是由于两个号码不同,使用什么方法?
我不确定whatsapp如何解决这个问题?
我能想到的另一种方法是使用libphonenumber来查找号码匹配,但它也给出了概率。
有没有其他推荐的方法来处理上述情况?

4

3 回答 3

2

我建议采用以下方法:

1,您的服务器应该有一个国家代码列表以及该国家的手机号码允许的相应位数

2、注册用户A第一次上线并将联系人发送到您的服务器时,您可以从号码的左端开始查看联系人。如果您看到国际前缀 00 或 +,则取左起第一个数字,识别国家代码,如果右侧剩余的位数与该国家/地区定义的位数匹配,则扫描在该国家/地区注册的用户列表国家代码以查看匹配项。如果不是,则取前 2 位数字以查看可能的国家代码并进行类似检查。现在,如果您在联系人中没有看到任何国际前缀,则表示该联系人与 A 位于同一国家/地区,因此您需要在获取所需的最后一个特定数字后扫描从同一国家注册的用户列表国家代码。

3、最好为每个注册用户生成一个唯一的id,作为用户数据库的主键。这将消除对重复用户进行详细扫描的需要。例如:让A有一个id 123,B有一个id 456。当A登录时,为A设置在线标志,然后搜索B,如果B已经注册,则将B的id 456添加到A的朋友列表中A存储的对应号码。所以下次A进来时,你会看到联系人B分配了一个唯一的ID,所以你需要检查这个ID是否设置了在线标志。即使用户更改了他/她的号码,这也会很有用

于 2013-06-28T08:39:36.867 回答
1

我在开发应用程序时遇到了类似的问题。你可以在这里做的是,检查特殊字符的输入,并考虑大小。删除空格,只存储最后 10 位数字。如果条目类型是字符串,这可以通过修剪和子字符串操作来实现。然后两个字符串的比较应该以期望的方式产生。

于 2013-06-28T07:29:13.527 回答
0

按照我的建议

==> 首先,您使用 replace(" ","") 函数删除号码中的所有空格,

==> 然后使用查询匹配最后 10 个字符,以便它为您提供您想要查找的手机号码,在线或离线用户通讯录。

于 2014-02-10T18:01:47.680 回答