PhotoHunt目前正在执行此操作。它通过执行以下步骤来做到这一点:
- 在用户登录时存储用户的 Google+ ID(或电子邮件,在您的情况下)。为简单起见,我们称第一个登录用户 Alice。
- 当新用户 Bob 登录时,执行people.list API 调用以列出 Bob 已对您的应用可见的人员的 Google+ ID,并将其与您网站上已为用户存储的 Google+ ID 进行比较。
- 如果 Bob 的可见人中的某个人已经在网站上,如 Google+ id 的比较所示,请在您的私人社交图上创建一条边,表明 Bob 与 Alice 有这种关系。例如,如果 Bob 在 Google+ 上圈了 Alice,他与 Alice 有这种关系(Bob -> Alice,Bob 圈了 Alice,所以边是 Bob 到 Alice)并且还创建了从 Alice 到 Bob 的连接(Alice 与 Bob 在Bob 在他的圈子里有 Alice)。
- 第三个用户 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 服务器上计算和维护图形服务器端。
从数据库的角度来看,您只会存储“边缘”关系。这极大地简化了对图的查询,并且只返回那些具有正确边缘约束的用户,这些用户需要创建要跟踪或公开的关系。