0

我正在构建一个 webapp+android 应用程序,并认为如果我可以向“Alice”展示她的哪些朋友也使用该服务会很有用。

用户身份验证是通过 google oath2 完成的,因此我可以访问所有用户的电子邮件。

我想知道的是如何构建这样的查询?因为我基本上拥有的是

  • 用户可能有很多人 Alice:(bob@gmail.com, user..)
  • 我数据库中的用户(alice@gmail.com、bob@gmail.com、..)
  • “友谊”是否互惠 Bob:(alice@gmail.com, chet..) || (Chet@gmail.com,戴安娜..)

我不希望有一个“我们是朋友是/否”的系统,并且遍历用户的整个联系人列表似乎非常浪费。后端运行在 php+mysql 上。

我将如何实际查询我感兴趣的人的列表?

4

2 回答 2

3

PhotoHunt目前正在执行此操作。它通过执行以下步骤来做到这一点:

  1. 在用户登录时存储用户的 Google+ ID(或电子邮件,在您的情况下)。为简单起见,我们称第一个登录用户 Alice。
  2. 当新用户 Bob 登录时,执行people.list API 调用以列出 Bob 已对您的应用可见的人员的 Google+ ID,并将其与您网站上已为用户存储的 Google+ ID 进行比较。
  3. 如果 Bob 的可见人中的某个人已经在网站上,如 Google+ id 的比较所示,请在您的私人社交图上创建一条边,表明 Bob 与 Alice 有这种关系。例如,如果 Bob 在 Google+ 上圈了 Alice,他与 Alice 有这种关系(Bob -> Alice,Bob 圈了 Alice,所以边是 Bob 到 Alice)并且还创建了从 Alice 到 Bob 的连接(Alice 与 Bob 在Bob 在他的圈子里有 Alice)。
  4. 第三个用户 Chet 将绘制相同的关系图,该用户在可见圈子中都有 Alice 和 Bob,并且在 Bob 和 Alice 的圈子列表中。

从视觉上看,我描述的图表如下,箭头表示从一个用户到另一个用户的边:

在此处输入图像描述

对于 Photohunt,从任何用户到任何其他用户的优势都将创建一种关系,在这种关系中,他们在网站上看到彼此是连接的。在此过程中,您将创建最全面的用户图,最大化用户之间的连接并最大化出现在关系内容流中的内容量。

由于 Photohunt 以这种方式解释图表,Bob、Alice 和 Chet 都看到他们通过 Google+ 建立了关系,这反映在“社交”内容流中。在计算上,您只需在每次新用户连接您的站点时执行检查。

但是,可能存在隐私问题:Alice 是否希望 Bob 知道她在网站上?

为了缓解这种隐私问题,您还可以在识别出 Alice 在 Bob 的圈子中时执行另一次检查,然后对 Alice 的可见人员执行第二次 people.list API 调用。当 Bob 与 Alice 建立连接时,您可以在公开两个用户都在站点上之前确保 Bob 与 Alice 有关系。因此,只有那些有相互联系的人才会知道他们在网站上。对于这种情况,只有 Chet 和 Alice 可以看到对方,并且只有 Bob 和 Chet 可以看到对方。因为 Bob 和 Alice 没有相互联系,所以他们看不到对方。

图表的第三种解释是跟踪“在可见的人中”、关系,跟踪“在我的可见人列表中”,最后,在您的站点上“已相互可见”。

正如 Brett 指出和 Joanna 澄清的那样,生成相互关系或部分关系会影响性能。您要么必须保留 Google+ 用户 ID 的边图,以存储您网站上尚不存在的连接,要么必须有效地轮询识别连接的所有用户。但是,如果您想将资源投入到生成私有图上,您现在可以这样做。在手机上执行这些计算的含义相当可怕。如果您要这样做,我建议您在 PHP/MySQL 服务器上计算和维护图形服务器端。

从数据库的角度来看,您只会存储“边缘”关系。这极大地简化了对图的查询,并且只返回那些具有正确边缘约束的用户,这些用户需要创建要跟踪或公开的关系。

于 2013-05-02T06:00:22.683 回答
0

有一个已知的 API 调用功能请求可以执行此操作。如果您想跟踪此 API 调用的进度,您可以在以下问题上加注星标以获取有关它的电子邮件更新。 https://code.google.com/p/google-plus-platform/issues/detail?id=531

于 2013-05-01T00:50:46.253 回答