如何使用PeopleAPI获取有关“其他联系人”的完整信息?

背景

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

问题

Contacts API 已被弃用,我们需要使用 People API。

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

遗憾的是,根据文档(此处),从“其他联系人”查询项目列表,您最多只能获得 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. 遗憾的是,没有类似的搜索“其他联系人”部分的查询(除了这里,它再次为您提供相同的 3 个字段)。

  2. 试图找出我遗漏的其他字段是否可以在其他地方使用。我甚至不知道resourceName或者etag是可靠和查询唯一的。

  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. 我想也许我可以创建一个新组(标签),将“其他联系人”复制到那里,然后从那里获取信息(因为它允许获取更多字段),但是文档(此处)说它是以前可能,现在不再可能:

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

这是一个更好的解决方案(如果它有效),因为我可以安全地删除组而不影响实际联系人。

问题

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

以上是如何使用PeopleAPI获取有关“其他联系人”的完整信息?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>