Ionic 5接入Facebook登录仅开发者本人账号可正常使用故障求助
问题排查与解决方案
1 Facebook开发者后台配置校验
- 权限审核:生产模式下
email属于Facebook高级权限,必须提交权限审核通过后,非开发者/测试账号才能调用接口获取该字段。你的账号属于应用关联的开发者账号,默认拥有权限,其他普通账号未通过权限审核时无法获取email,会导致getUserDetail接口报错。 - 签名哈希配置:确认你打包APK所用的签名文件的SHA1哈希(注意区分debug签名和release签名)是否已经完整配置到Facebook后台的Android应用设置中,签名不匹配时非测试设备会出现登录校验失败问题。
- 测试用户配置:如果你的应用还未正式公开发布,需要将测试用的其他Facebook账号添加到后台「测试用户」列表中,否则生产模式下非开发者账号无法正常使用登录功能。
2 Android 11适配问题
你使用的Cordova Android 8.1.0版本默认未适配Android 11的包可见性规则,需要在AndroidManifest.xml中添加Facebook应用的包可见性配置,否则系统无法识别已安装的Facebook应用,会导致已登录Facebook账号的设备直接登录失败,清除缓存后走网页登录流程才能触发登录的问题。手动添加配置可参考:
<!-- 加入到AndroidManifest.xml的<manifest>节点下 --> <queries> <package android:name="com.facebook.katana" /> <package android:name="com.facebook.lite" /> </queries>
3 代码逻辑修正
你当前调用fb.api获取用户信息时,请求权限仅传入了public_profile,要获取email字段需要同时传入email权限,同时需要对返回的email字段做判空处理,避免用户未绑定Facebook邮箱时跳转失败,修正后代码参考:
getUserDetail(userid: any) { // 新增email权限参数 this.fb.api('/' + userid + '/?fields=id,email', ['public_profile', 'email']) .then(res => { this.users = res; // 增加判空逻辑,避免无email时跳转异常 if (this.users?.email) { this.router.navigate(["/menu", this.users.email]); } else { // 可补充无邮箱时的兜底逻辑 alert("无法获取用户邮箱信息"); } }) .catch(e => { alert("Error getUserDetail"); }); }
内容的提问来源于stack exchange,提问作者Guillermo Rodriguez
相关产品推荐
相关产品推荐

