我的例子。请不要关注用户。
import Foundation
import FBSDKCoreKit
import FBSDKLoginKit
import SVProgressHUD
import SDWebImage
class FacebookManager {
static func getFacebookProfileData(comletion: ((user: User?, error: NSError?) -> ())?) {
SVProgressHUD.showWithStatus(StringModel.getting)
let loginManager = FBSDKLoginManager()
loginManager.loginBehavior = .SystemAccount
loginManager.logInWithReadPermissions(nil, fromViewController: nil) { (tokenResult, error) in
if error == nil {
guard let token = tokenResult?.token?.tokenString else {
SVProgressHUD.dismiss()
return
}
getFacebookProfile(token, completion: { (error, user) in
if error == nil {
comletion?(user: user, error: error)
SVProgressHUD.dismiss()
} else {
SVProgressHUD.dismiss()
print(error?.localizedDescription)
}
})
} else {
SVProgressHUD.dismiss()
print(error.localizedDescription)
}
}
}
private static func getFacebookProfile(token: String, completion: ((error: NSError?, user: User?) -> ())?) {
FBSDKGraphRequest(graphPath: "me", parameters: ["fields" : "email, name"], HTTPMethod: "GET").startWithCompletionHandler { (requestConnection, result, error) in
if error == nil {
guard let resultDictionary = result as? [String : AnyObject] else { return }
guard let email = resultDictionary["email"] as? String else { return }
guard let id = resultDictionary["id"] as? String else { return }
guard let name = resultDictionary["name"] as? String else { return }
getFacebookProfileImage(id, completion: { (image, error) in
if error == nil {
let user = User(facebookName: name, facebookID: id, facebookEmail: email, facebookProfileImage: image)
completion?(error: nil, user: user)
}
})
} else {
print(error.localizedDescription)
completion?(error: nil, user: nil)
}
}
}
private static func getFacebookProfileImage(userID: String, completion: ((image: UIImage?, error: NSError?) -> ())) {
guard let facebookProfileImageURL = NSURL(string: "https://graph.facebook.com/\(userID)/picture?type=large") else { return }
print(facebookProfileImageURL)
let sdImageManager = SDWebImageManager.sharedManager()
sdImageManager.downloadImageWithURL(facebookProfileImageURL, options: .AvoidAutoSetImage, progress: nil) { (image, error, cachedType, bool, url) in
if error == nil {
completion(image: image, error: nil)
} else {
completion(image: nil, error: error)
print(error.localizedDescription)
}
}
}
}