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

iOS 11中GoogleSignIn调用signIn始终返回「用户取消登录流程」问题求助

解决GoogleSignIn调用signIn()时的警告与「用户取消登录」错误

我之前也碰到过一模一样的坑!折腾了好半天才理清问题根源,给你几个针对性的排查方向和解决方案:

1. 先搞定视图控制器生命周期的问题(对应那个警告)

你看到的 [Warning] Attempting to load the view of a view controller while it is deallocating... 警告,本质是调用登录的视图控制器(VC)在认证流程还没结束时就被释放了,导致系统的SFAuthenticationViewController回调时找不到对应的代理对象,进而触发异常。

解决方法:

  • 确保设置GIDSignIn.sharedInstance().delegate的VC是被强引用的,比如不要在一个即将被销毁的临时VC里调用登录;
  • 如果是用weak修饰代理,要保证VC在整个登录流程中处于活跃状态(比如不要在调用signIn()后马上dismiss当前VC);
  • 在VC的deinit方法里不要提前置空代理,可以等登录回调完成后再处理。

2. 检查GoogleSignIn的基础配置(解决「用户取消登录」错误的核心)

这个错误大概率是配置漏项导致的,尤其是URL Scheme和回调处理:

  • 检查Info.plist的URL Scheme:必须添加你的Google Cloud控制台里的「反向客户端ID」(Reverse Client ID)到CFBundleURLTypes的CFBundleURLSchemes数组里。你可以在Google Cloud的OAuth 2.0客户端ID页面找到这个值;
  • 正确实现URL回调处理:
    如果是用UIApplicationDelegate,在AppDelegate里添加:
    func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
        return GIDSignIn.sharedInstance().handle(url)
    }
    
    如果是用UISceneDelegate,在SceneDelegate里添加:
    func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>) {
        guard let url = URLContexts.first?.url else { return }
        _ = GIDSignIn.sharedInstance().handle(url)
    }
    
    没加这个回调的话,Google登录完成后无法正确跳转回你的App,就会被判定为「用户取消」。

3. 排查调用时机的问题

避免在VC生命周期的早期(比如viewDidLoad)或者异步操作的回调里调用signIn(),因为此时VC可能还没完全加载完成,或者已经被移出导航栈。建议在用户主动触发的事件(比如按钮点击)里调用登录方法,确保当前VC处于活跃状态。

4. 额外检查:客户端ID是否正确

确认你在初始化GIDSignIn时设置的客户端ID和Google Cloud里的完全一致,包括大小写和特殊字符:

GIDSignIn.sharedInstance().clientID = "你的客户端ID"

按照这个顺序排查,基本能解决那个警告和「用户取消登录」的错误!

内容的提问来源于stack exchange,提问作者baohung02

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:27:35