FedCM迁移测试遇NetworkError:无法获取令牌及One Tap弹窗不显示问题
问题场景
我们按照FedCM Beta测试计划对应用程序做迁移测试,执行了以下操作:
- 在
chrome://flags中启用FedCmWithoutThirdPartyCookies实验特性 - 浏览器设置中阻止第三方Cookie
- 在
IdConfiguration对象中设置use_fedcm_for_prompt: true - 未使用
opt_out_or_no_session参数 - 未配置
data-prompt_parent_id和中间iframe的位置样式属性 - 网站未定义CSP
- 登录未使用AMP支持
操作后出现两个问题:
- One Tap提示弹窗初始不显示,抛出提示:“浏览器站点设置中已禁用第三方登录”
- 一分钟后控制台出现错误:
[GSI_LOGGER]: FedCM get() rejects with NetworkError: Error retrieving a token.,始终无法看到弹窗
尝试注释IdConfiguration中的auto_select: true参数,问题依旧。
排查方向及解决建议
检查第三方登录权限设置
除了阻止第三方Cookie,务必确认Chrome中「设置 > 隐私和安全 > 网站设置 > 第三方登录」选项处于允许状态。该选项禁用会直接触发“浏览器站点设置中已禁用第三方登录”提示,是最常见的触发原因。确认FedCM特性生效
修改chrome://flags后重启浏览器,再次确认FedCmWithoutThirdPartyCookies处于「Enabled」状态——部分场景下不重启浏览器,特性不会完全加载生效。验证核心配置完整性
检查IdConfiguration中的client_id等核心参数是否拼写正确、配置完整。另外FedCM要求站点必须使用HTTPS(本地开发可使用localhost),HTTP环境会直接导致NetworkError。排查网络请求状态
打开浏览器网络面板,查看FedCM相关请求(如https://accounts.google.com/gsi/fedcm/开头的请求)是否出现4xx/5xx错误,或是被浏览器安全策略拦截,这是触发NetworkError的主要原因。临时添加CSP测试
虽然当前未定义CSP,但部分浏览器环境下,缺失FedCM相关的CSP指令可能导致请求被拦截。可尝试添加以下指令测试:Content-Security-Policy: connect-src https://accounts.google.com; frame-src https://accounts.google.com;确认站点FedCM注册状态
确保你的域名已在Google Identity控制台完成FedCM相关的配置与验证,未注册的域名无法正常使用FedCM功能。
内容的提问来源于stack exchange,提问作者mani

