You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 03:48:20