(Firebase)使用Facebook登录后,它不会返回我的应用程序

时间:2019-08-22 10:55:38

标签: swift firebase firebase-authentication facebook-login

当我在真实设备上使用Facebook登录时,它会停留在Facebook登录页面上,而不会返回我的应用程序。

我已经将Facebook代码放在URL方案中,并将所有需要放入info.plist的代码。

这是我使用Firebase登录Facebook的所有代码。

在Viewdidload

import SwiftUI
import Combine

struct ReceiveOutsideView: View {
    @ObservedObject var observable: SomeObservable = SomeObservable()

    var body: some View {
        Text(observable.information)
            .onReceive(observable.publisher) {
                print("Updated from Timer.publish")
        }
        .onReceive(observable.updatePublisher) {
            print("Updated from updateInformation()")
        }
    }
}

class SomeObservable: ObservableObject {

    @Published var information: String = ""

    var publisher: AnyPublisher<Void, Never>! = nil

    init() {

        publisher = Timer.publish(every: 1.0, on: RunLoop.main, in: .common).autoconnect().map{_ in
            print("Updating information")
            //self.information = String("RANDOM_INFO".shuffled().prefix(5))
        }.eraseToAnyPublisher()

        Timer.scheduledTimer(
            timeInterval: 1.0,
            target: self,
            selector: #selector(updateInformation),
            userInfo: nil,
            repeats: true
        ).fire()
    }

    let updatePublisher = PassthroughSubject<Void, Never>()

    @objc func updateInformation() {
        information = String("RANDOM_INFO".shuffled().prefix(5))
        updatePublisher.send()
    }
}

class SomeClass {

    @ObservedObject var observable: SomeObservable

    var cancellable: AnyCancellable?

    init(observable: SomeObservable) {
        self.observable = observable

        cancellable = observable.publisher.sink{ [weak self] in
            guard let self = self else {
                return
            }

            self.doSomethingWhenObservableChanges() // Must be a class to access self here.
        }
    }

    // How to call this function when "observable" changes?
    func doSomethingWhenObservableChanges() {
        print("Triggered!")
    }
}

我在Viewcontroller中使用的代码。

facebookButton.addTarget(self, action: #selector(handleCustomFBLogin), for: .touchUpInside)

在Appdelegate中

@objc func handleCustomFBLogin(sender:UIButton!){
        LoginManager().logIn(permissions: ["email", "public_profile"], from: self) { (result, error) in

            guard let result = result else {
                print("No result found")
                return
            }
            if result.isCancelled {
                print("Facebook Login Cancelled")
            } else if let error = error {
                print("Process error \(error.localizedDescription)")
            } else {
                print("Logged in")
                self.showEmailAddress()
                self.actionfb()
            }
        }
    }

    func loginButton(_ loginButton: FBLoginButton, didCompleteWith result: LoginManagerLoginResult?, error: Error?){
        if(error != nil){
            print(error!)
            return
        }else{
            print("Successfully Logged in using facebook")
            showEmailAddress()
        }

    }

    func actionfb(){
        let accessToken = AccessToken.current
        guard (accessToken?.tokenString) != nil else {return}
        let credential = FacebookAuthProvider.credential(withAccessToken: accessToken!.tokenString)
        // Perform login by calling Firebase APIs
        Auth.auth().signInAndRetrieveData(with: credential) { (authResult, error) in

            if let error = error {
                self.showAlert(title: "error", message: "\(error.localizedDescription)")
                return
            }
            self.performSegue(withIdentifier: "GoGo", sender: nil)
            self.navigationController?.setNavigationBarHidden(true, animated: true)
        }

    }

    func showEmailAddress(){

        GraphRequest(graphPath: "/me", parameters: ["fields" : "id, name, first_name, last_name, email, birthday, picture"]).start { (connection, result, err) in
            if(err != nil){
                print("Failed to start GraphRequest", err ?? "")
                return
            }
            print(result ?? "")

        }

    }

    func loginButtonDidLogOut(_ loginButton: FBLoginButton){
        print("Logged out of Facebook")
    }

只有当我在真实设备上进行测试时,这种情况才会发生!!但是在仿真中,它可以正常工作

1 个答案:

答案 0 :(得分:0)

我不确定这是否是解决方案,但这已为我解决。 我从Firebase的Authentication-> Facebook下复制了OAuth重定向URI enter image description here

然后在我的Facebook开发人员页面上的产品-> Facebook登录->设置下,将其粘贴到有效的OAuth重定向URI中 enter image description here

然后我通过单击“使用Facebook登录”输入用户名和密码来登录,并且错误不再发生。

我不知道错误是否会再次出现,但这也许会对某人有所帮助。