如何在来自特定用户的 Google People API 响应中唯一标识 Person 资源?

Posted

技术标签:

【中文标题】如何在来自特定用户的 Google People API 响应中唯一标识 Person 资源?【英文标题】:How to uniquely identity a Person resource in Google People API response from a particular user? 【发布时间】:2017-01-29 05:22:55 【问题描述】:

Google People APIGoogle Plus API 不同,它不会为响应中的每个 Person 资源提供唯一的 id

为什么不推荐/删除此功能,以及如何在没有id 的用户联系人列表中唯一标识Person

【问题讨论】:

【参考方案1】:

简而言之,使用resourceName 作为ID。

Google People API 是用户的联系人列表,并具有特定于用户的 ID。他们可以创建只有邮寄地址或只有姓名但没有联系信息的联系人。 Google 无法从逻辑上整理所有 Google 通讯录用户的所有这些联系人。

特定联系人或用户有一个resourceName 字段,该字段为验证用户唯一标识该资源(联系人)。您基本上想将其用作id。这是您使用的值,例如查询People.get。

这是来自 People.connections 的单个联系人的示例响应的一部分:

  
    "resourceName": "people/103710953423417258027",
    "etag": "qwApd98gduQ=",
    "metadata": 
        "sources": [
            "type": "CONTACT",
            "id": "1",
            "etag": "#rj+KMFHVyHY="
        , 
            "type": "PROFILE",
            "id": "103710953423417258027",
            "etag": "#4eZfef/IuMFw="
        ],
        "objectType": "PERSON"
    ,
    ...
  

resourceName 本质上是该联系人的“id”,然后在metadata 字段中列出了联系人数据的来源。例如。 CONTACT 用于用户手动输入姓名/电话/电子邮件/等的 Google 通讯录条目。 PROFILE 是 Google 个人资料,通常包含 Google+ 数据。

Person resource docs 是了解有关这些价值观的更多信息的好地方。

【讨论】:

我说的是特定于用户的联系人Ids。如果您查看Google People API,您将不会在响应中找到任何返回的Id 字段。这是设计使然还是他们忘记包含它? @jackofblades 我已经用resourceName的信息更新了答案 Person 资源文档提到这一点:在添加或删除链接联系人和个人资料的字段(例如经过验证的电子邮件、经过验证的电话号码或个人资料 URL)时,资源名称可能会发生变化。 在这种情况下,我们不能将其用作Id 进行同步和更新,可以吗? resourceNamesource.id 是您必须使用的,所以您必须使用它们进行同步。 personMetadata 应该链接新旧资源名称,因此只要您可以更新 ID,您就应该可以将其用作同步 ID。 developers.google.com/people/api/rest/v1/people#personmetadata

以上是关于如何在来自特定用户的 Google People API 响应中唯一标识 Person 资源?的主要内容,如果未能解决你的问题,请参考以下文章

如何将 Firebase 数据库锁定给来自特定(电子邮件)域的任何用户?

创建人时,有没有办法在 google people api 中添加第二个自定义字段?

使用 google people API 访问 google 连接

从 Google People API 搜索中获取姓名和电话号码

调用 google+ 方法 plusService.People.Get 时出错

如何知道用户是不是来自谷歌广告