问题:
警告告诉您application(_:open:options:)
无法找到实施:
2017-01-09 09:47:53.702 Dog_Log[3922:]Implementation of application:openURL:sourceApplication:annotation: not found. Please add the handler into your App Delegate. Class: Dog_Log.AppDelegate
解:
您可能忘记了application(_:open:options:)
要实现的方法,通过调用handle(_:sourceApplication:annotation:)
它来处理重定向到您的应用程序.你AppDelegate.swift
应该看起来像这样(提示在代码注释中):
import UIKit import Firebase import GoogleSignIn @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate { var window: UIWindow? func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { // configure firebase FIRApp.configure() // configure google GIDSignIn.sharedInstance().clientID = FIRApp.defaultApp()?.options.clientID return true } func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool { // handled to go back to application after google log in let handled = GIDSignIn.sharedInstance().handle(url, sourceApplication:options[UIApplicationOpenURLOptionsKey.sourceApplication] as? String, annotation: [:]) return handled } // other methods }
您使用的示例ViewController符合GIDSignInUIDelegate和GIDSignInDelegate,以访问signIn方法并将其与自定义按钮的@IBAction一起使用:
import UIKit import Firebase import GoogleSignIn class ViewController: UIViewController, GIDSignInUIDelegate, GIDSignInDelegate { override func viewDidLoad() { super.viewDidLoad() // make the view controller the delegate GIDSignIn.sharedInstance().uiDelegate = self GIDSignIn.sharedInstance().delegate = self } // your action of the button to call the signIn method @IBAction func pressGoogleSignInButton(_ sender: UIButton) { GIDSignIn.sharedInstance().signIn() } func sign(_ signIn: GIDSignIn!, didSignInFor user: GIDGoogleUser!, withError error: Error!) { if let error = error { print("failed to log into google: ", error) return } print("successfully logged into google ", user) guard let idToken = user.authentication.idToken else { return } guard let accessToken = user.authentication.accessToken else { return } let credentials = FIRGoogleAuthProvider.credential(withIDToken: idToken, accessToken: accessToken) FIRAuth.auth()?.signIn(with: credentials, completion: { (user, error) in if let error = error { print("Faild to create a firebase user with google account: ", error) return } guard let uid = user?.uid else { return } print("Successfully logged into firebase with google ", uid) // redirect to the next screen after successful login }) } }