如何获取用户街道地址?授权后调用Google People API未返回地址
解决Google People API无法返回街道地址的问题
以下是几个排查和解决方向:
1. 确认Google账户有已填写的地址
先检查你的Google账户「个人信息」里的「联系信息」→「地址」是否有已保存的街道地址。如果账户里根本没填,API自然拿不到数据。
2. 确保授权时用户同意了地址权限
你的授权代码里虽然加了https://www.googleapis.com/auth/user.addresses.read,但要确认用户在授权弹窗里确实勾选了「查看您的地址」权限:
- 重新触发授权流程,因为你设置了
prompt: "consent",会强制弹出权限确认框,仔细检查权限列表。 - 如果之前用户授权时没选这个权限,
prompt: "consent"会让用户重新确认所有权限,确保地址权限被同意。
3. 调整API请求的地址字段参数
调用People API时,默认可能不会返回所有地址细节,需要明确指定要获取的地址字段:
修改请求URL,明确请求地址的具体字段:
const json = await (await fetch("https://people.googleapis.com/v1/people/me?personFields=birthdays,genders,addresses&addresses=formattedValue,streetAddress,city,region,postalCode", { headers: { Authorization: `Bearer ${authData.access_token}` } })).json();
或者用addresses=*请求所有地址相关字段:
const json = await (await fetch("https://people.googleapis.com/v1/people/me?personFields=birthdays,genders,addresses&addresses=*", { headers: { Authorization: `Bearer ${authData.access_token}` } })).json();
4. 验证Access Token的权限范围
检查当前Access Token是否真的包含地址读取权限:
const tokenInfo = await (await fetch(`https://oauth2.googleapis.com/tokeninfo?access_token=${authData.access_token}`)).json(); console.log(tokenInfo.scope); // 查看输出是否包含https://www.googleapis.com/auth/user.addresses.read
如果输出里没有这个权限,说明授权流程有问题,需要重新走授权。
内容的提问来源于stack exchange,提问作者Avi
相关产品推荐
相关产品推荐

