Zor*_*gan 13 facebook ios facebook-login swift swiftui
使用 SwiftUI 解释 Facebook 登录的资源并不多。我不确定我的代码是否需要 a ViewController,因为 FacebookLoginManager.login()包含一个ViewController参数 - 但这并没有真正转化为 SwiftUI。
无论如何,当用户单击Button以下内容时,我试图将用户登录到 Facebook :
登录视图.swift
import Foundation
import SwiftUI
import FBSDKLoginKit
struct LoginView: View {
@EnvironmentObject var auth: UserAuth
var body: some View {
ZStack {
VStack {
Image("launcher_logo").resizable()
.scaledToFit()
.frame(height: 100)
.padding(.top, 100)
Spacer()
Button(action: {
FBLogin()
}) {
Text("Continue with Facebook")
}.foregroundColor(Color.black)
Run Code Online (Sandbox Code Playgroud)
当Button点击 时,它FBLogin在下面初始化-login()在它的中触发init():
模型:
class FBLogin: LoginManager {
let loginButton = FBLoginButton()
let token = AccessToken.current
let permissions = ["user_birthday", "user_gender", "public_profile"]
override init(){
super.init()
logIn(permissions: permissions, from: nil)
print("fb init()")
}
override func logIn(permissions: [String], from fromViewController: UIViewController?, handler: LoginManagerLoginResultBlock? = nil) {
// TODO
}
}
Run Code Online (Sandbox Code Playgroud)
但是,我不确定从那里开始做什么。目前,只fb init()打印但我想执行登录并收听登录结果。
任何的想法?
小智 19
只需LoginManager在里面创建实例ObservableObject,然后自定义登录完成。你可以很容易地在里面使用SwiftUI View。没有必要UIViewControllerRepresentable。这是我的样本。
struct ContentView: View {
@ObservedObject var fbmanager = UserLoginManager()
var body: some View {
Button(action: {
self.fbmanager.facebookLogin()
}) {
Text("Continue with Facebook")
}
}
}
class UserLoginManager: ObservableObject {
let loginManager = LoginManager()
func facebookLogin() {
loginManager.logIn(permissions: [.publicProfile, .email], viewController: nil) { loginResult in
switch loginResult {
case .failed(let error):
print(error)
case .cancelled:
print("User cancelled login.")
case .success(let grantedPermissions, let declinedPermissions, let accessToken):
print("Logged in! \(grantedPermissions) \(declinedPermissions) \(accessToken)")
GraphRequest(graphPath: "me", parameters: ["fields": "id, name, first_name"]).start(completionHandler: { (connection, result, error) -> Void in
if (error == nil){
let fbDetails = result as! NSDictionary
print(fbDetails)
}
})
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2760 次 |
| 最近记录: |