Android嵌入式浏览器中使用Flutter+AWS Cognito实现Facebook登录失败
问题根因
Facebook官方从2021年开始全面封禁第三方应用通过嵌入式WebView(即你当前使用的安卓嵌入式浏览器容器)发起登录请求,属于平台级安全策略,和你已完成的AWS Cognito、Facebook后台配置无关,即使开启Facebook登录相关权限也无法绕过该限制。
报错截图如下:
可落地解决方案
方案1:使用符合安全规范的系统级浏览器容器(推荐)
该方案改动量最小,不需要调整现有Cognito和Facebook的后台配置:
- 替换当前Flutter端调用嵌入式WebView的登录逻辑,改用官方维护的
flutter_appauth插件完成Cognito OAuth认证流程 - 该插件在安卓层默认使用Chrome自定义标签、iOS层使用ASWebAuthenticationSession,完全符合Facebook的登录安全要求,不会触发拦截
- 在Cognito用户池的应用客户端设置中新增安卓端自定义回调Schema(例如
yourAppSchema://callback),保证认证完成后可以正常跳转回你的应用
方案2:通过Facebook原生SDK登录后对接Cognito
如果你需要集成更多Facebook原生能力,可以选择该方案:
- 接入
flutter_facebook_auth插件完成Facebook原生登录,获取Facebook返回的访问令牌 - 调用Cognito的
initiate_auth接口,设置认证类型为联邦身份提供商认证,传入Facebook的访问令牌完成身份校验,直接获取Cognito下发的id_token、refresh_token和access_token
方案3:适配Cognito托管UI调用逻辑
如果你当前使用的是Cognito托管UI:
- 不要在嵌入式WebView中加载托管UI地址,改用上述AppAuth方案调用托管UI即可,安卓端会自动唤起Chrome自定义标签加载页面,不会触发Facebook拦截
注意:不要尝试通过修改WebView User-Agent、注入JS等方式绕过Facebook限制,该类方案已被官方完全封堵,还会触发Facebook安全风控,存在应用被下架的风险
内容的提问来源于stack exchange,提问作者M Ali Tahir
相关产品推荐
相关产品推荐

