诸如whatsapp之类的应用如何显示仅使用该应用的联系人?

时间:2018-08-11 15:11:09

标签: android android-contacts

在使用电话身份验证的应用程序(如whatsapp)中:

任何用户打开以查看其联系人时,whatsapp将仅显示您手机中正在使用whatsapp的联系人(例如他们过滤您的联系人)。

我对实施类似内容的想法:

我可以将所有用户保存在数据库中(当他们通过我的应用进行身份验证时),现在,当我在活动中加载联系人时,我会检查联系人是否存在于数据库中,如果该用户存在,则我添加他/她进入名单。

问题:

如果我使用上述方法:

那么可以说我的数据库中有10,000个用户,那么每次我想在应用程序中显示某个用户的联系人时,遍历10,000个用户就没有意义。

问题:

您如何看待诸如whatsapp之类的应用来实现这样的事情?

1 个答案:

答案 0 :(得分:3)

您必须至少一次与联系人循环遍历用户,但是您可以像WhatsApp一样巧妙地做到这一点。

用户首次打开并在WhatsApp中注册时,他们会征求您的权限以读取您的联系人(来自API级别23),当用户在后台授予WhatsApp权限时,将其连接到后端服务器(其中他们使用用户设备中可用的联系人保存其所有用户数据),并且响应此http请求,只有那些返回其帐号信息的电话号码在WhatsApp上注册,然后在WhatsApp本地将其保存为用户设备(SQLite或任何与数据库相关的服务) ),当用户打开WhatsApp的通讯录活动时,它会显示来自本地用户数据库而非服务器的数据。

现在的问题是:添加新联系人后会发生什么?

如果用户创建了新联系人,则WhatsApp将收到通知,然后WhatsApp再次使用新联系人的号码连接到其后端服务器。现在假设如果用户在创建新联系人时未连接到Internet,那么会发生什么情况?

WhatsApp会将号码保存为本地数据库的另一个表中未检查的号码,并且然后当用户再次连接到互联网时,whatsapp将再次以相同的请求类型连接到其后端服务器。同样,在WhatApp的联系活动中,有一个名为“强制刷新”的选项,它可以执行相同的操作,但不能在后台执行。

这与删除联系人相同,只是不需要连接到服务器,它实际上是从用户本地数据库中删除WhatsApp联系人。

现在的问题是,这样做有什么好处?

  • 数据使用量少,非常适合用户体验
  • 每次用户打开联系人活动时都不需要与服务器联系。这对用户体验也很重要。