Facebook登录+;SwiftUI:loginButton&;登录/注销后不调用loginButtonDidLogOut
我正在尝试为我的SwiftUI应用程序实现Facebook登录,以下是我的AppDelegate.swift文件:Facebook登录+;SwiftUI:loginButton&;登录/注销后不调用loginButtonDidLogOut,swiftui,fbsdkloginkit,Swiftui,Fbsdkloginkit,我正在尝试为我的SwiftUI应用程序实现Facebook登录,以下是我的AppDelegate.swift文件: import UIKit import FirebaseCore import FirebaseAuth import FBSDKLoginKit import FBSDKCoreKit @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate, LoginButtonDelegate {
import UIKit
import FirebaseCore
import FirebaseAuth
import FBSDKLoginKit
import FBSDKCoreKit
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate, LoginButtonDelegate {
static var orientationLock = UIInterfaceOrientationMask.portrait
func application(_ application: UIApplication, supportedInterfaceOrientationsFor window: UIWindow?) -> UIInterfaceOrientationMask {
return AppDelegate.orientationLock
}
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
FirebaseApp.configure()
return ApplicationDelegate.shared.application(application, didFinishLaunchingWithOptions: launchOptions)
}
@available(iOS 9.0, *)
func application(_ application: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any])
-> Bool {
let handled = ApplicationDelegate.shared.application(
application,
open: url,
sourceApplication: options[UIApplication.OpenURLOptionsKey.sourceApplication] as? String,
annotation: options[UIApplication.OpenURLOptionsKey.annotation]
)
return handled
}
func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool {
return ApplicationDelegate.shared.application(
application,
open: url
)
}
func loginButton(_ loginButton: FBLoginButton, didCompleteWith result: LoginManagerLoginResult?, error: Error?) {
print("FB Login Button function")
if let error = error {
print("ERROR1: \(error.localizedDescription)")
return
}
let credential = FacebookAuthProvider.credential(withAccessToken: AccessToken.current!.tokenString)
Auth.auth().signIn(with: credential) { (res, err) in
if err != nil {
print("ERROR2: \(String(describing: err?.localizedDescription))")
return
}
print("email: \(String(describing: res?.user.email))")
print("name: \(String(describing: res?.user.displayName))")
}
}
func loginButtonDidLogOut(_ loginButton: FBLoginButton) {
print("Did logout")
}
好的,下面是我的SwiftUI代码:
import SwiftUI
import FirebaseCore
import FBSDKLoginKit
struct LoginView: View {
@EnvironmentObject var thisSession: CurrentSession
@ObservedObject var mainData = MainViewModel()
var body: some View {
VStack {
facebook().frame(width: 240, height: 50)
}
}
}
struct LoginView_Previews: PreviewProvider {
static var previews: some View {
LoginView().environmentObject(CurrentSession())
}
}
struct facebook : UIViewRepresentable {
func makeUIView(context: UIViewRepresentableContext<facebook>) -> FBLoginButton {
let button = FBLoginButton()
//button.delegate = self
return button
}
func updateUIView(_ uiView: FBLoginButton, context: UIViewRepresentableContext<facebook>) {
print("FBButton updateUIView called")
}
}
导入快捷界面
导入FirebaseCore
导入FBSDKLoginKit
结构逻辑视图:视图{
@环境对象变量thisSession:CurrentSession
@ObservedObject var mainData=MainViewModel()
var body:一些观点{
VStack{
facebook().框架(宽度:240,高度:50)
}
}
}
结构LoginView\u预览:PreviewProvider{
静态var预览:一些视图{
LoginView().environmentObject(CurrentSession())
}
}
结构facebook:UIViewRepresentable{
func makeUIView(上下文:UIViewRepresentableContext)->FBLoginButton{
let button=FBLoginButton()
//button.delegate=self
返回按钮
}
func updateUIView(uiView:FBLoginButton,context:UIViewRepresentableContext){
打印(“调用FBButton UpdateUI”)
}
}
我可以看到LoginView上的按钮,甚至可以登录/注销(按钮上的文本分别从“登录”更改为“注销”。但是“loginButton”和“loginButtonDidLogOut”中的代码从未执行。我本应该在调试控制台中看到一些消息,但没有调用此代码
我做错了什么吗?好像我忘了设置某个委托,或者我应该在其他地方调用Auth.Auth(),而不是loginButton()函数。您的
AppDelegate
符合loginbuttonelegate
,因此您只需要在makeUIView
中设置委托:
func makeUIView(context: UIViewRepresentableContext<facebook>) -> FBLoginButton {
let button = FBLoginButton()
button.delegate = UIApplication.shared.delegate as! AppDelegate
return button
}
func makeUIView(上下文:UIViewRepresentableContext)->FBLoginButton{
let button=FBLoginButton()
button.delegate=UIApplication.shared.delegate as!AppDelegate
返回按钮
}
你解决了这个问题吗,我也有同样的问题!