【发布时间】: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
我尝试过的
- 我尝试查看是否可以通过“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")
}
-
遗憾的是,没有类似的“其他联系人”部分可供搜索(here 除外,它再次为您提供相同的 3 个字段)。
-
试图查找是否有其他我错过的字段可以在其他地方使用。我什至不知道
resourceName或etag对于查询是否可靠且唯一。 -
尝试向查询中添加更多字段,尽管文档只讨论了 3 个字段。当然失败了……
-
有一个名为
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,不是吗?
- 我想也许我可以创建一个新组(标签),将“其他联系人”复制到那里,然后从那里获取信息(因为它允许获取更多字段),但是文档 (here ) 说以前是可能的,现在不可能了:
唯一可以添加成员的系统联系人组是contactGroups/myContacts 和contactGroups/starred。其他系统联系人组已弃用,只能删除联系人。
这是一个更好的解决方案(如果可行的话),因为我可以在不影响实际联系人的情况下安全地删除群组。
问题
为了获取有关“其他联系人”列表中每个项目的各种信息(如普通联系人),我应该使用什么最佳方式?是否可以不复制到联系人列表并且不获取(联系人首字母的)“假”照片?
【问题讨论】: