【问题标题】:How to get full information about "other contacts" using People API?如何使用 People API 获取有关“其他联系人”的完整信息?
【发布时间】:2021-07-27 19:19:27
【问题描述】:

背景

我正在开发一个应用程序,该应用程序需要获取“其他联系人”的信息,因为它们出现在“联系人”website of Google 的地址簿页面上:

问题

Contacts API 正在变成deprecated,而我们需要使用 People API。

为此,我使用 Java 库 (here),它可以更轻松地访问各种功能。

遗憾的是,根据文档 (here),从“其他联系人”中查询项目列表,您最多只能获得 3 个可能的字段:

  • 电子邮件地址
  • 名字
  • 电话号码

确实,当我使用它时,这就是我得到的。我也有“etag”和“resourceName”的字段,但就是这样。没有照片,没有封面照片,没有别的……

执行此操作的代码非常短(设置完所有内容后):

val otherContactsResponse =
    otherContacts.list().setReadMask("emailAddresses,names,phoneNumbers")
        .setPageSize(itemsCountToRequest).setPageToken(nextPageToken).execute()
val result=otherContactsResponse.otherContacts

我尝试过的

  1. 我尝试查看是否可以通过“reourceName”查询(例如this one),但似乎“其他联系人”的处理方式与普通联系人不同,因此这不起作用:
result.forEach { personBasic: Person ->
    val test: Person? = peopleService.get(personBasic.resourceName!!)
        .setPersonFields(
            "addresses,ageRanges,birthdays,coverPhotos,emailAddresses,genders,metadata,names,nicknames,occupations,organizations,phoneNumbers,photos,urls")
        .execute()
    Log.d("AppLog", "$test")
}
  1. 遗憾的是,没有类似的“其他联系人”部分可供搜索(here 除外,它再次为您提供相同的 3 个字段)。

  2. 试图查找是否有其他我错过的字段可以在其他地方使用。我什至不知道resourceNameetag 对于查询是否可靠且唯一。

  3. 尝试向查询中添加更多字段,尽管文档只讨论了 3 个字段。当然失败了……

  4. 有一个名为copyOtherContactToMyContactsGroup (here) 的函数,它似乎会将联系人复制到主要联系人组。我想如果我使用它然后查询联系人本身(不仅仅是“其他联系人”),我可以获得所需的信息。但这是浪费时间并且会污染用户的通讯录,即使是暂时的。我必须确保在添加联系人后立即从那里删除联系人...

编辑:也尝试过,虽然它似乎有效,但我不想使用它,因为它会污染通讯录中的用户未添加的联系人。另外,我有时会得到一张图片,它只是带有背景的人的字母。这是它的代码:

result.firstOrNull { !it.names.isNullOrEmpty()&&!it.emailAddresses.isNullOrEmpty() }?.let { person ->
    val request =
        CopyOtherContactToMyContactsGroupRequest().setCopyMask(
            "emailAddresses,names,phoneNumbers")
            .setReadMask(
                "addresses,ageRanges,birthdays,coverPhotos,emailAddresses,genders,metadata,names,nicknames,occupations,organizations,phoneNumbers,photos,urls")
    val copyResult: Person? =
        services!!.otherContacts.copyOtherContactToMyContactsGroup(
            person.resourceName, request).execute()
    Log.d("AppLog", "success $copyResult")
}

另外,与简单查询相比,这似乎非常慢,而且也没有批处理操作。此外,经过测试,我认为它可能会导致与达到配额相关的各种服务器问题(大约每分钟 180 次左右)。

我认为由于网站显示照片并可以显示每个联系人信息,我们应该也有这个 API,不是吗?

  1. 我想也许我可以创建一个新组(标签),将“其他联系人”复制到那里,然后从那里获取信息(因为它允许获取更多字段),但是文档 (here ) 说以前是可能的,现在不可能了:

唯一可以添加成员的系统联系人组是contactGroups/myContacts 和contactGroups/starred。其他系统联系人组已弃用,只能删除联系人。

这是一个更好的解决方案(如果可行的话),因为我可以在不影响实际联系人的情况下安全地删除群组。

问题

为了获取有关“其他联系人”列表中每个项目的各种信息(如普通联系人),我应该使用什么最佳方式?是否可以不复制到联系人列表并且不获取(联系人首字母的)“假”照片?

【问题讨论】:

    标签: android google-people-api


    【解决方案1】:

    好吧,很遗憾,现在我有一个解决方法。

    首先,我将各种字段复制到一个新的 Person 对象中,每个对象对应一个查询结果,然后我使用 batchCreateContactshere,每批次的最大项目数为)将它们全部添加,然后我使用batchDeleteContactshere,每批最大项目数为 500)将它们全部删除

    遗憾的是这仍然会污染通讯录,但它比我找到的要快得多,而且也是暂时的。

    我发现了奇怪的东西:

    1. API 使用情况似乎与网站上显示的项目不完全相同。我知道是因为我试图在网站上找到从 API 中找到的姓名和电子邮件,但没有显示出来。更奇怪的是:它们之间的项目数似乎相同
    2. 有些项目只有名称,这很奇怪,因为:它们是如何到达那里的?

    【讨论】:

      【解决方案2】:

      “其他”联系人与“普通”联系人不同,可用信息较少,但这是为什么呢?我稍微调查了一下,发现following

      与人互动时保存联系信息

      当您在 Google 产品上与人互动时,您可以自动保存他们的联系信息,包括姓名、电子邮件地址和电话号码。启用此设置后,您将保留以下联系人信息:

      您与之共享内容的人,例如云端硬盘中的文档
      与您分享内容的人,例如 Google 相册中的分享相册
      您参与的活动或群组中包含的人

      我认为这些是“其他”联系人,它们成为一种收集信息最少的集结地。

      我还发现,在Google Contacts web page 上,每当我向“其他联系人”添加信息时,该联系人会自动从“其他”部分消失,并与常规联系人一起出现。

      因此,从网络界面来看,“其他”联系人应该只包含最少的信息,例如姓名、电子邮件地址和电话号码,如果添加/更新信息,则应该将其提升为常规联系人列表。这个场景将解释为什么“其他”联系人会被区别对待。

      如果您看到“其他”联系人提供的信息超出了最基本的要求,那可能就是问题所在。


      更新:嗯,原来任何“普通”联系人都可以隐藏在网络界面中,并且所有信息都与联系人一起转移到“其他联系人”列表中,因此“其他”联系人可以拥有比最少的信息。

      这对我来说似乎是一种意外状态。

      【讨论】:

      • 对不起,我认为你写的有误。首先,它也来自电子邮件地址。如果您通过电子邮件联系新人并且不手动将其添加到联系人中,则会将其添加到“其他”列表中。此外,当您到达网页时,您会看到各种信息,包括该人的图像。这意味着您不会通过 API 获得有关此人的所有类型的信息。我认为出于某种原因,这是对 API 的一些奇怪限制。
      • 我认为我们意见一致。我唯一的观点是,这似乎是一个奇怪的限制,可能是偶然而不是设计造成的,因为这有什么意义呢?可能值得一个尚未报告的错误报告。我认为您的分析涵盖了所有基础。
      • 但是你写的一些东西我其实没看懂。无论如何,在这里:github.com/googleapis/google-api-java-client-services/issues/…
      • @androiddeveloper 这些类型的问题会出现在哪里,而不是常规问题跟踪器?
      • 我不知道。还有更好的地方吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-06-06
      • 2021-06-05
      • 1970-01-01
      • 2022-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多