Flutter Google Sign In在iOS模拟器二次登录报错:Safari无法打开页面
Flutter Google SignIn iOS模拟器二次登录报错解决方法
问题场景
使用Flutter的google_sign_in包实现登录,首次登录正常,但二次登录时触发Safari报错:"Safari can't open the page because the network connection was lost",Google密钥配置无误,重置iOS模拟器可临时解决,但开发体验差。
问题原因
核心是iOS模拟器的ASWebAuthenticationSession缓存了旧的登录会话或无效认证状态,导致认证跳转时出现虚假的网络连接错误提示,并非真实网络问题。另外forceCodeForRefreshToken: true的配置可能在重复登录时与缓存会话产生冲突。
解决方案
1. 主动清除本地登录缓存
在发起新登录前,先检查并清理已有登录会话:
import 'package:google_sign_in/google_sign_in.dart'; final googleSignIn = GoogleSignIn( scopes: ['email'], forceCodeForRefreshToken: true, hostedDomain: "", ); // 登录前先退出已有会话 if (await googleSignIn.isSignedIn()) { await googleSignIn.signOut(); // 可选:彻底断开连接,清除所有缓存数据 await googleSignIn.disconnect(); } var credentials = await googleSignIn.signIn();
2. 调整GoogleSignIn初始化参数
若无需强制刷新令牌,移除forceCodeForRefreshToken: true配置,避免干扰默认会话管理:
final googleSignIn = GoogleSignIn( scopes: ['email'], hostedDomain: "", );
3. 配置iOS端认证会话缓存策略
在iOS项目的Info.plist中添加以下配置,强制认证使用临时浏览器会话,不缓存登录状态:
<key>ASWebAuthenticationSessionPrefersEphemeralWebBrowserSession</key> <true/>
4. 轻量清除模拟器Safari缓存
无需重置整个模拟器,仅清除Safari缓存即可:
- 打开模拟器内的Safari应用
- 点击底部"书本"图标进入历史记录页面
- 点击"清除"按钮,选择清除所有历史记录和网站数据
内容的提问来源于stack exchange,提问作者Abelardo Aqui
相关产品推荐
相关产品推荐

