0

我正在尝试通过 FirebaseUI Auth 连接 Facebook 登录,但是我无法让 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 问题,这里本质上是相似的; 如何在 Swift 中使用 FirebaseUI 在 iOS 上进行 Google 身份验证?

我试图从上面的 Stack Overflow 复制代码,因为他说他确实获得了更多使用他的代码出现的选项(他的问题是关于身份验证的进一步错误),但我仍然遇到相同的自我委托错误。我尝试将 FIRAuthUIDelegate 分配给 AppDelegate 但它不符合要求。我错过了什么?

4

2 回答 2

0

我也不熟悉 FirebaseUI,但这是一个使用常规 Firebase 和 FBSDK 向 Facebook 用户授权的工作示例

@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 登录的工作授权。

于 2016-06-27T00:12:20.257 回答
0

我没有使用过 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,但这就是委托通常的工作方式。

于 2016-06-27T00:03:29.290 回答