Swift/iOS中Facebook登录如何获取用户位置与家乡信息?
嘿,我之前也踩过Facebook SDK获取用户位置/家乡信息的坑,正好能给你梳理下核心问题和解决办法:
一、先排查权限审核状态——这大概率是核心原因
Facebook的user_location和user_hometown属于需要人工审核的隐私权限,不是你在后台申请了就自动生效的。你自己的账号因为是和应用绑定的开发者/测试账号,默认能获取这些权限,但普通用户的账号只有当Facebook正式批准你的权限申请后,才能选择授权给你。
- 怎么查:打开Facebook开发者后台,进入你的应用→【应用审核】→【权限和功能】,找到
user_location和user_hometown,看状态是不是「已批准」。如果是「待审核」或「未提交」,那普通用户根本看不到这两个权限的授权选项,自然拿不到数据。 - 划重点:提交审核时一定要写清楚你的应用为什么需要这些数据、具体会怎么使用,比如“用于给用户推荐同城活动”,Facebook会严格审核是否符合他们的隐私政策,模糊的描述很容易被拒。
二、确认登录时是否明确请求了这两个权限
就算权限审核通过了,也要确保你在登录流程里主动请求了这两个权限,不然用户授权时只会看到默认的邮箱、姓名选项。
举个Android端的代码示例:
LoginManager.getInstance().logInWithReadPermissions(this, Arrays.asList("public_profile", "email", "user_location", "user_hometown"));
登录后可以调用/me/permissions接口,确认用户是否真的授权了这两个权限——如果用户拒绝了,那API肯定返回不了数据。
三、检查Graph API请求的字段是否正确
默认调用/me只会返回id、name这类基础信息,你必须明确指定要获取location和hometown字段,不然Facebook不会返回。
正确的请求格式应该是:
GET /me?fields=id,name,email,location,hometown
另外,这两个字段返回的是对象(比如location: {id: "xxx", name: "北京"}),你需要解析这个对象才能拿到具体的地点名称。
四、用户隐私设置的限制
有些用户的Facebook账号里,位置或家乡信息设置了仅自己可见,就算他们授权了你的应用,你也拿不到这些数据。这种情况属于用户的隐私选择,你没法强制获取,只能在应用里友好提示用户:如果想提供这些信息,可以调整他们Facebook账号的隐私设置。
五、测试阶段用测试用户更靠谱
在权限审核通过之前,别用普通用户账号测试,去Facebook开发者后台创建测试用户,这些测试用户可以被授予所有你申请的权限,方便你调试功能,避免白忙活。
内容的提问来源于stack exchange,提问作者Reindl




