我在 Doc 上做了任何事情,但是当我调用 GIDSignIn.sharedInstance().signIn()
时它崩溃了。
代码:
在 AppDelegate:
func configGoogleServer() {
var configureError: NSError?
GGLContext.sharedInstance().configureWithError(&configureError)
assert(configureError == nil, "Error configuring Google services: \(configureError as Optional)")
GIDSignIn.sharedInstance().delegate = self
}
在一些 View Controller :
GIDSignIn.sharedInstance().signIn()
我已经配置了像
com.googleusercontent.apps.598xxx...xxx
这样的 URL 方案。崩溃截图:
调试区上没有任何显示...... :(
最佳答案
你把委托(delegate)放在 AppDelegate.swift
里面,这不是真的,你 AppDelegate 应该是这样的:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
// .. something else
// GOOGLE
// Initialize sign-in
var configureError: NSError?
GGLContext.sharedInstance().configureWithError(&configureError)
assert(configureError == nil, "Error configuring Google services: \(configureError)")
// No delegate here
return true
}
func application(_ application: UIApplication,
open url: URL, sourceApplication: String?, annotation: Any) -> Bool {
return GIDSignIn.sharedInstance().handle(url,
sourceApplication: sourceApplication,
annotation: annotation)
}
@available(iOS 9.0, *)
func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
if let sourceApplication = options[UIApplicationOpenURLOptionsKey.sourceApplication] as? String {
let annotation = options[UIApplicationOpenURLOptionsKey.annotation]
return GIDSignIn.sharedInstance().handle(url,
sourceApplication: sourceApplication,
annotation: annotation)
}
return true
}
然后将 SignIn Delegate 放在 YourViewController 中,发生登录操作:ư
class YourViewController: UIViewController {
// something else....
func doSignIn() {
GIDSignIn.sharedInstance().delegate = self
GIDSignIn.sharedInstance().uiDelegate = self
GIDSignIn.sharedInstance().scopes = YOUR_GOOGLE_SCOPES
if GIDSignIn.sharedInstance().hasAuthInKeychain() {
GIDSignIn.sharedInstance().signInSilently()
} else {
GIDSignIn.sharedInstance().signIn()
}
}
}
extension YourViewController: GIDSignInDelegate, GIDSignInUIDelegate {
func sign(_ signIn: GIDSignIn!, didSignInFor user: GIDGoogleUser!,
withError error: Error!) {
if let error = error {
self.showMessage("Authentication Error", type: .error)
self.service.authorizer = nil
} else {
self.service.authorizer = user.authentication.fetcherAuthorizer()
// PUT YOUR METHOD AFTER SIGNED-IN HERE
}
}
}
关于iOS 谷歌登录失败,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44652429/