61 lines
2.0 KiB
Swift
61 lines
2.0 KiB
Swift
//
|
|
// SPLoginManager+Facebook.swift
|
|
// MoviaBox
|
|
//
|
|
// Created by 佳尔 on 2025/4/25.
|
|
//
|
|
|
|
import UIKit
|
|
import FacebookLogin
|
|
|
|
//https://developers.facebook.com/docs/facebook-login/ios?checkpoint_src=any
|
|
extension SPLoginManager {
|
|
|
|
///facebook登录
|
|
func facebookSignLogin(presentingViewController: UIViewController, completer: ((_ model: SPThirdSignModel?) -> Void)?) {
|
|
|
|
let loginManager = LoginManager()
|
|
loginManager.logOut()
|
|
loginManager.defaultAudience = .everyone
|
|
|
|
loginManager.logIn(permissions: ["public_profile", "email"], from: presentingViewController) { result, error in
|
|
guard error == nil, let result = result else {
|
|
completer?(nil)
|
|
return
|
|
}
|
|
if result.isCancelled {
|
|
completer?(nil)
|
|
return
|
|
}
|
|
|
|
let request = GraphRequest(graphPath: "me", parameters: ["fields" : "id,name,email,picture"], httpMethod: .get)
|
|
request.start { connection, result, error in
|
|
guard let result = result as? [String : Any] else {
|
|
completer?(nil)
|
|
return
|
|
}
|
|
let model = SPThirdSignModel()
|
|
model.platform = .faceBook
|
|
model.third_id = result["id"] as? String
|
|
model.email = result["email"] as? String
|
|
|
|
if let picture = result["picture"] as? [String : Any],
|
|
let data = picture["data"] as? [String : Any],
|
|
let url = data["url"] as? String
|
|
{
|
|
model.avator = url
|
|
}
|
|
|
|
if let name = result["name"] as? String {
|
|
model.family_name = name
|
|
} else {
|
|
model.family_name = result["first_name"] as? String
|
|
model.giving_name = result["last_name"] as? String
|
|
}
|
|
completer?(model)
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|