Диалог входа в Facebook автоматически закрывается при нажатии кнопки - PullRequest
0 голосов
/ 27 декабря 2018

Я работаю над приложением для iOS, которое использует Firebase + Facebook Authentication для входа в систему и аутентификации пользователя.Функциональность работает, только когда нажата кнопка «Продолжить с Facebook», она автоматически закрывает диалоговое окно, прежде чем пользователь может нажать «Продолжить» или «Отменить».

Я загрузил gif в качестве примера для лучшего объяснения, когда я первый раз щелкнул по нему, он работает, но после второй или третьей попытки и даже после закрытия приложенияи запуск его снова, проблема все еще там.

Вот фрагмент кода из моего AppDelegate.swift:

import UIKit
import Firebase
import GoogleSignIn
import FBSDKLoginKit
import FacebookCore

var fbAccessToken: AccessToken?

@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.
        // Use Firebase library to configure APIs
        FirebaseApp.configure()

        // Facebook
        FBSDKApplicationDelegate.sharedInstance().application(application, didFinishLaunchingWithOptions: launchOptions)

        // Added from Firebase docs -- Google
        GIDSignIn.sharedInstance().clientID = FirebaseApp.app()?.options.clientID
        GIDSignIn.sharedInstance().delegate = self

        return true
    }

    @available(iOS 9.0, *)
    func application(_ application: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any]) -> Bool {
        // FB Auth
        let handled: Bool = SDKApplicationDelegate.shared.application(application, open: url,  sourceApplication: options[UIApplicationOpenURLOptionsKey.sourceApplication] as! String!, annotation: options[UIApplicationOpenURLOptionsKey.annotation]!)

        if !handled{
        // Google Auth
            print("clicked google sign in")
            return GIDSignIn.sharedInstance().handle(url,
                                                     sourceApplication:options[UIApplicationOpenURLOptionsKey.sourceApplication] as? String,
                                                     annotation: [:])
        }
        return true
    }

Вот фрагмент кода из моего ViewController.Swift

import UIKit
import Firebase
import FirebaseAuth
import GoogleSignIn
import FacebookCore
import FBSDKLoginKit
import FacebookLogin

class ViewController: UIViewController, GIDSignInUIDelegate {

    @IBOutlet weak var FbLogin: FBSDKLoginButton! // Facebook Login button

    override func viewDidLoad() {
        super.viewDidLoad()

        // set delegates
        GIDSignIn.sharedInstance().uiDelegate = self
        //GIDSignIn.sharedInstance().signIn()

        FbLogin.addTarget(self, action: #selector(handleSignInWithFacebookTapped), for: .touchUpInside)
    }

    @objc func handleSignInWithFacebookTapped() {
        let loginManager = LoginManager()
        loginManager.logIn(readPermissions: [.publicProfile, .email], viewController: self ){ (result) in
            switch result{
            case .success(grantedPermissions: _, declinedPermissions: _, token: _):
                print("Succesfully logged into facebook")
                self.signIntoFirebase()
            case .failed(let err):
                print(err)
            case .cancelled:
                print("cancelled")
            }
        }
    }

    fileprivate func signIntoFirebase(){
        guard let authenticationToken = AccessToken.current?.authenticationToken else {return}
        let credential = FacebookAuthProvider.credential(withAccessToken: authenticationToken)
        Auth.auth().signIn(with: credential) { (user, err) in
            if let err = err {
                print(err)
                return
            }
            print("Sucessfully hit Firebase")
            DispatchQueue.main.async {
                self.performSegue(withIdentifier: "loginPush", sender: self)
                print("Logged in successfully")
            }
        }
    }

Вот изображение СоединенийИнспектор для кнопки:

enter image description here

...