Google SignIn:无法断开iOS应用程序的连接

5

我在我的iOS应用中实现了Google登录,并可以第一次登录到Google帐户。但是,当我注销并尝试重新登录时,我会看到如下所示的帐户权限屏幕,而不是登录屏幕。

enter image description here

以下是我使用的代码。
var signIn = GIDSignIn.sharedInstance()
signIn.delegate = self
signIn.uiDelegate = self

以下是注销并断开连接的代码。
GIDSignIn.sharedInstance().signOut()
GIDSignIn.sharedInstance().disconnect()

断开连接后,我再次尝试使用以下代码进行登录

GIDSignIn.sharedInstance().signIn()

如何在注销和断开连接后显示登录屏幕?

你是否在维护应用程序的登录和注销状态? - Anil Kumar
你找到任何解决方案了吗? - George
1个回答

2

我曾经卡在这里很久,最终想出了一个相当hacky的解决方案。

看起来GIDSignIn账户列表使用了Safari Web View,因此它对账户的记录使用了cookies/local storage并且与iOS Keychain(和OAuth tokens)无关。

当用户在我的应用上点击注销时,我会打开一个SFSafariViewController,如下:

import SafariServices

class MyViewController: SFSafariViewControllerDelegate {
...

在你的按钮操作中(或者你想要注销用户的地方):

let logoutUrl = URL(string: "https://www.google.com/accounts/Logout")!
let logoutViewController = SFSafariViewController.init(url: logoutUrl)
logoutViewController.delegate = self
self.present(logoutViewController, animated: true, completion: nil)

你需要实现 didCompleteInitialLoad 代理方法并按照以下方式关闭视图控制器:

func safariViewController(_ controller: SFSafariViewController, didCompleteInitialLoad didLoadSuccessfully: Bool) {
    controller.dismiss(animated: false) {
        //Switch view controllers
    }
}

这似乎是我能想到的唯一方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接