Facebook登录出现Invalid scope错误,无法获取姓名邮箱权限
解决Facebook登录的Invalid Scope错误
首先直接点出问题核心:你代码里设置的"name"并不是Facebook认可的有效权限范围(scope),这就是触发Invalid scope错误的根本原因。
为什么会出现这个错误?
Facebook的权限体系里,不存在单独的name权限。用户的姓名信息(first_name、last_name)属于public_profile权限的覆盖范畴,而这个权限是默认包含在登录请求中的,不需要你手动声明。你只需要显式请求email这个单独的权限就足够了。
修正后的代码
把设置权限的那一行替换成下面的写法:
loginButton.setReadPermissions(Arrays.asList("email"));
如果你想显式声明public_profile(虽然没必要,但语法上完全合法),也可以写成:
loginButton.setReadPermissions(Arrays.asList("email", "public_profile"));
额外需要检查的配置项
- Facebook开发者后台配置:确保你在Facebook开发者平台的应用中,已经正确添加了Android平台,填写了匹配的包名、签名哈希值——这些基础配置错误也可能间接导致权限请求失败。
- 权限审核(正式上线场景):如果你的应用是面向普通用户的正式版本,
email权限需要提交Facebook审核;但在测试沙盒模式下(使用测试账号登录),不需要审核就能直接获取该权限。
验证逻辑说明
修正权限后,你原本写的GraphRequest请求fields="id,email,first_name,last_name"是完全有效的:first_name和last_name会通过默认的public_profile权限返回,email则通过你显式请求的权限返回,这样就能正常拿到用户的邮箱、姓氏和名字信息了。
内容的提问来源于stack exchange,提问作者AAYUSH NAGPAL
相关产品推荐
相关产品推荐

