GoogleSignin - Попытка загрузить представление контроллера представления, в то время как это освобождает, не разрешена и может привести к неопределенному поведению - PullRequest
0 голосов
/ 10 сентября 2018

Когда я отменяю Google Signin, появляется предупреждение. В противном случае работает нормально. Если я реализую это с помощью кнопки действия, у меня не будет никаких ошибок. Но моя цель - запустить его при запуске.

import UIKit
import GoogleSignIn
import Firebase

class BaseScreen : UIViewController, GIDSignInUIDelegate {

override func viewDidLoad() {
    super.viewDidLoad()

    GIDSignIn.sharedInstance().uiDelegate = self
    GIDSignIn.sharedInstance().signIn()
} }

Это мой делегат приложения

import UIKit
import Firebase
import GoogleSignIn

 @UIApplicationMain
  class AppDelegate: UIResponder, UIApplicationDelegate, 
  GIDSignInDelegate {

   var window: UIWindow?


func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    // Override point for customization after application launch.
    FirebaseApp.configure()

    GIDSignIn.sharedInstance().clientID = FirebaseApp.app()?.options.clientID
    GIDSignIn.sharedInstance().delegate = self

    print("application did finish launching")

    return true
}

func application(_ application: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any])
    -> Bool { return GIDSignIn.sharedInstance().handle(url, sourceApplication:options[UIApplicationOpenURLOptionsKey.sourceApplication] as? String,
                                                 annotation: [:])}

func sign(_ signIn: GIDSignIn!, didSignInFor user: GIDGoogleUser!, withError error: Error?) {
    // ...
 if error != nil {
        // ...
    print("login failed")
    GIDSignIn.sharedInstance().signIn()


        return
    }

    guard let authentication = user.authentication else { return }
    let credential = GoogleAuthProvider.credential(withIDToken: authentication.idToken,
                                                   accessToken: authentication.accessToken)
    // ...

    Auth.auth().signInAndRetrieveData(with: credential) { (authResult, error) in
        if error != nil {
            // ...
            return

        }
        // User is signed in

        print("Firebase login Success", user)
        return
    }           }

func sign(_ signIn: GIDSignIn!, didDisconnectWith user: GIDGoogleUser!, withError error: Error!) {

} }

Я хочу, чтобы вход происходил автоматически, а не по какому-либо действию. Я также попробовал это из viewDidAppear(), но все еще получал ту же ошибку.

...