使用Google APIs添加联系人后为何未在Google联系人列表中显示?
这种情况我之前也碰到过几次,大概率是几个常见的细节没注意到,咱们一步步排查:
API版本/端点不匹配
Google现在主推的是People API(v1),而旧版Contacts API(v3)已经逐步被替代。如果你用People API的people:createContact端点(POST https://people.googleapis.com/v1/people:createContact)创建了联系人,但查询时用了旧版Contacts API的https://www.google.com/m8/feeds/contacts/default/full端点,就可能出现找不到的情况——两者的数据同步可能有延迟,甚至部分场景下不互通。
建议统一使用People API查询:GET https://people.googleapis.com/v1/people/me/connections?personFields=names,emailAddresses,确保和创建用的是同一套API。数据同步延迟
Google的联系人数据在创建后,可能需要几秒到几分钟的同步时间,尤其是刚完成POST请求就立刻发起查询,很可能还没同步到查询的数据源里。
你可以先等2-3分钟再试,或者更直接的:用POST请求返回的resourceName(类似people/c123456)直接查询单个联系人,比如发起GET https://people.googleapis.com/v1/{resourceName}?personFields=names,emailAddresses,这样能直接验证联系人是否真的创建成功。查询请求的参数/筛选条件限制
检查你的GET请求是否带了不必要的筛选条件,比如:- 有没有设置
query参数做关键词过滤,导致刚创建的联系人不符合过滤规则; personFields参数是否包含了你用来识别联系人的字段(比如names、emailAddresses),如果这个参数没设置或设置不全,返回的结果里可能没有你需要的信息,让你误以为联系人不存在;- 是否设置了
groupMembershipFilter参数指定了某个分组,而刚创建的联系人没加入该分组。
- 有没有设置
OAuth权限范围不一致
确认添加和查询联系人时使用的OAuth令牌,对应的权限范围是否兼容:- 创建联系人通常需要
https://www.googleapis.com/auth/contacts或https://www.googleapis.com/auth/contacts.create; - 查询联系人需要
https://www.googleapis.com/auth/contacts.readonly或更宽的contacts权限。
如果查询用的令牌权限范围不够,可能会返回不完整的联系人列表,甚至无法返回新创建的联系人。
- 创建联系人通常需要
用户账号不匹配
仔细检查:添加联系人时用的OAuth令牌对应的Google账号,和查询时用的是不是同一个?比如在Playground里用了账号A测试成功,代码里却用了账号B的令牌,那肯定找不到账号A里创建的联系人。
内容的提问来源于stack exchange,提问作者Innocent Criminal

