2017-01-09 2 views
1

Я реализовал учетную запись gmail с использованием Firebase и успешно смог аутентифицировать пользователя по электронной почте после нажатия пользовательской кнопки, которая имеет действие GIDSignIn.sharedInstance().signIn().Аутентификация Gmail, не возвращающаяся в приложение

Однако после того, как пользователь разрешает основной профиль доступа он не возвращается в приложение, он просто идет на этот экран:

login

Кто-нибудь знает, как сделать его вернуться в приложение после того, как пользователь аутентифицируется? Это моя консоль:

017-01-09 09:47:46.565367 Dog_Log[3922:829530] [MC] Reading from private effective user settings. 
2017-01-09 09:47:53.702 Dog_Log[3922:] <FIRAnalytics/WARNING> Implementation of application:openURL:sourceApplication:annotation: not found. Please add the handler into your App Delegate. Class: Dog_Log.AppDelegate 

ответ

5

Проблема:

Предупреждение говорит вам о том, что реализация application(_:open:options:) не может быть найдено:

2017-01-09 09:47:53.702 Dog_Log[3922:] <FIRAnalytics/WARNING> Implementation of application:openURL:sourceApplication:annotation: not found. Please add the handler into your App Delegate. Class: Dog_Log.AppDelegate 

Решение:

Вероятно, вы забыли метод application(_:open:options:) ement, с вызовом 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, чтобы получить доступ к методу и использовать для входа в аккаунте это с @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 

    }) 
    } 
} 
+0

Так что, если это должно быть моим AppDelegate.swift, для ViewController я должен просто иметь 'IBAction', что называет' GIDSignIn.sharedInstance() для входа в аккаунт() '.? – MarksCode

+0

@MarksCode обновил мой ответ, поэтому вы можете использовать этот метод в IBAction кнопки в определенном контроллере вида – ronatory

+0

Вы спасатель, спасибо! – MarksCode

Смежные вопросы