【问题标题】:How does apps like whatsapp show contacts that are only using the app?whatsapp 等应用程序如何显示仅使用该应用程序的联系人?
【发布时间】:2019-01-18 22:14:11
【问题描述】:

在使用电话身份验证的应用中,例如 whatsapp:

当任何用户打开查看他/她的联系人时,whatsapp 将仅显示您手机中正在使用 whatsapp 的联系人(就像他们过滤了您的联系人一样)。

我对实现类似的想法:

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

问题:

如果我使用上述方法:

假设我在数据库中有 10,000 个用户,那么每次我想在我的应用中显示用户的联系人时循环遍历 10,000 个用户是没有意义的。

问题:

你认为像 whatsapp 这样的应用程序是如何实现这样的事情的?

【问题讨论】:

标签: android android-contacts


【解决方案1】:

您必须至少一次通过联系人循环访问您的用户,但您可以像 WhatsApp 一样巧妙地做到这一点。

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

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

如果用户创建了新联系人,WhatsApp 将收到通知,然后 WhatsApp 再次使用新联系人的号码连接到他们的后端服务器。现在假设如果用户在创建新联系人时没有连接到互联网那么会发生什么?

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

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

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

  • 小数据用途,有利于用户体验
  • 每次用户打开联系人活动时都无需联系服务器。这对用户体验也很有好处。

【讨论】:

  • 在 API 级别 23 而不是 21 中添加了运行时权限。
  • 现在你的意思是我必须检查数据库中是否只存在一次用户并将它们保存在本地......另一个问题出现在我的脑海中:如果从数据库中删除用户会发生什么数据库(换句话说,用户决定删除他/她的帐户,并且由于某种原因他/她是我的联系人....我的本地列表应该如何刷新?)
  • 在每天的某个时间间隔内,您必须检查用户的联系人列表,就像用户第一次打开应用程序时一样,如果用户不在服务器响应列表中但在用户的联系人列表中,则响应然后,您的应用会从应用的联系人列表数据库中删除该帐户,并在用户强制刷新联系人活动中的联系人时执行相同操作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多