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里添加:
没加这个回调的话,Google登录完成后无法正确跳转回你的App,就会被判定为「用户取消」。func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>) { guard let url = URLContexts.first?.url else { return } _ = GIDSignIn.sharedInstance().handle(url) }
3. 排查调用时机的问题
避免在VC生命周期的早期(比如viewDidLoad)或者异步操作的回调里调用signIn(),因为此时VC可能还没完全加载完成,或者已经被移出导航栈。建议在用户主动触发的事件(比如按钮点击)里调用登录方法,确保当前VC处于活跃状态。
4. 额外检查:客户端ID是否正确
确认你在初始化GIDSignIn时设置的客户端ID和Google Cloud里的完全一致,包括大小写和特殊字符:
GIDSignIn.sharedInstance().clientID = "你的客户端ID"
按照这个顺序排查,基本能解决那个警告和「用户取消登录」的错误!
内容的提问来源于stack exchange,提问作者baohung02
相关产品推荐
相关产品推荐

