Попытка подключить вход в Facebook через FirebaseUI Auth, но возникла проблема с authUI.delegate = self

Я пытаюсь подключить вход в Facebook через FirebaseUI Auth, однако я не могу заставить кнопку подключения Facebook появиться в экземпляре authViewController. Платформа: iOS, Язык: Swift 2.0, Последний стабильный выпуск Xcode

Все работает, как и должно, до запуска экземпляра authViewController. Параметр электронной почты / пароля присутствует и активно создает нового пользователя в моей базе данных Firebase.

Проблема, с которой я сталкиваюсь, возникает при попытке реализовать функциональность входа в Facebook;

В моем файле AppDelegate.swift у меня есть следующее:

import Firebase
import FirebaseAuthUI
...
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {

    FIRApp.configure()
    let authUI = FIRAuthUI.authUI()!
    authUI.delegate = self

    return true
}

Я получаю сообщение об ошибке: «Невозможно присвоить значение типа« AppDelegate »типу« FIRAuthUIDelegate »» - в основном я не могу заставить работать следующую строку; authUI.delegate = self

Я прочитал всю документацию и просмотрел открытые / закрытые вопросы по реализации в репозитории проекта gitHub здесь: https://github.com/firebase/FirebaseUI-iOS/tree/master/FirebaseUI

Я просмотрел предыдущий вопрос StackOverflow, который имеет здесь схожий характер; Как использовать FirebaseUI для аутентификации Google на iOS в Swift?

Я попытался скопировать код из приведенного выше переполнения стека, поскольку он заявляет, что у него действительно появилось больше возможностей для отображения с использованием его кода (его вопрос касается ошибки ниже по строке, касающейся аутентификации), но я все еще сталкиваюсь с той же ошибкой самоделегирования. Я попытался назначить FIRAuthUIDelegate для AppDelegate, но это не соответствует. Что мне не хватает?


person Abhi    schedule 26.06.2016    source источник
comment
Решено: я не реализовал все методы, необходимые для FIRAuthUIDelegate.   -  person Abhi    schedule 27.06.2016


Ответы (2)


Я также не знаком с FirebaseUI, но вот рабочий пример авторизации пользователя в Facebook с использованием обычного Firebase и FBSDK.

@IBAction func fbButtonTapped(sender: UIButton) {
    let facebookReadPermissions = ["email", "public_profile", "user_photos"]
    FBSDKLoginManager().logInWithReadPermissions(facebookReadPermissions, fromViewController: self, handler: { (result:FBSDKLoginManagerLoginResult?, error:NSError?) -> Void in
        if error != nil {
            Helper.displayAlert("Error Logging into Facebook", message: error!.localizedDescription, viewController: self)
        } else {
            let credential = FIRFacebookAuthProvider.credentialWithAccessToken(FBSDKAccessToken.currentAccessToken().tokenString)
            FIRAuth.auth()?.signInWithCredential(credential) { (user, error) in
                if error != nil {
                    Helper.displayAlert("Error Logging into Facebook", message: error!.localizedDescription, viewController: self)
                } else {
                let request = FBSDKGraphRequest(graphPath:"me", parameters: ["fields": "id, first_name, last_name, email, age_range, gender, verified, timezone, picture"])
                    request.startWithCompletionHandler {
                        (connection, result, error) in
                        if error != nil {
                            print (error)
                        } else if let userData = result as? [String : AnyObject] {
                            guard let userID = FIRAuth.auth()?.currentUser?.uid else { return }
                            let userInfo = ["firstName": userData["first_name"] as! String, "lastName": userData["last_name"] as! String, "email": userData["email"] as! String, 
"gender": userData["gender"] as! String, "id": userData["id"] as! String, "verified": userData["verified"]?.description as! AnyObject,  "key": userID]


                            FirebaseData.fbData.createFirebaseUser(userID, user: userInfo)
                            self.performSegueWithIdentifier(self.loginSucessIdentifier, sender: nil)

                        }
                        }
                    }
                }
            }
        })
    }

func createFirebaseUser(uid: String, user: [String : AnyObject]) {
    REF_USERS.child(uid).setValue(user)
}

Код можно немного очистить, чтобы избавиться от всех операторов if let, но это должно заставить вас работать с авторизацией для входа в facebook.

person JustinM    schedule 27.06.2016
comment
У меня недостаточно очков, чтобы прокомментировать то, что вы сказали в сообщении других людей. Вы не соответствуете протоколу, потому что не вызываете требуемую функцию, которая необходима для соответствия протоколу. authUI: didSignInWithUser: ошибка: - person JustinM; 27.06.2016
comment
Спасибо JustinM, что решил проблему. Я не реализовал все методы, необходимые для соответствия FIRAuthUIDelegate. - person Abhi; 27.06.2016
comment
нет проблем, в любое время. Если проблема решена, пожалуйста, примите мой ответ, чтобы люди знали, что проблема решена, спасибо. - person JustinM; 27.06.2016

Я не работал с Firebase, но похоже, что вы должны поместить код в свой контроллер представления ...

import UIKit
import Firebase
import FirebaseAuthUI

class ViewController: UIViewController, FIRAuthUIDelegate {

    override func viewDidLoad() {
        super.viewDidLoad()
        FIRApp.configure()
        let authUI = FIRAuthUI.authUI()!
        authUI.delegate = self

}

Опять же, я раньше не использовал Firebase, но делегаты обычно работают именно так.

person Pranav Wadhwa    schedule 27.06.2016
comment
Такая же проблема в контроллере представления. ViewController не соответствует протоколу FIRAuthUIDelegate. - person Abhi; 27.06.2016
comment
Вы уверены, что добавили FIRAuthDelegate в свой контроллер представления? - person Pranav Wadhwa; 27.06.2016