This post shows how to display the Facebook user name and profile image on a simple iOS app using Swift 2.1.1 (Xcode 7.2).
1. Download a facebook icon from facebookbrand.com.
2. Include the FBSDK frameworks into an Xcode project and modify AppDelegate.swift:
See this tutorial: Facebook SDK and Swift - Create a Facebook Login Button
3. Drag the fb-art.jpg file into the Xcode project.
4. Modify ViewController.swift as:
Update (November 10, 2016) - Swift 3.0.1 (Xcode 8.1)
import UIKit
import FBSDKLoginKit
class ViewController: UIViewController, FBSDKLoginButtonDelegate {
var imageView : UIImageView!
var label: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
imageView = UIImageView(frame: CGRect(x: 0, y: 0, width: 100, height: 100))
imageView.center = CGPoint(x: view.center.x, y: 200)
imageView.image = UIImage(named: "fb-art.jpg")
view.addSubview(imageView)
label = UILabel(frame: CGRect(x: 0, y: 0, width: 200, height: 30))
label.center = CGPoint(x: view.center.x, y: 300)
label.text = "Not Logged In"
label.textAlignment = NSTextAlignment.center
view.addSubview(label)
let loginButton = FBSDKLoginButton()
loginButton.center = CGPoint(x: view.center.x, y: 400)
loginButton.delegate = self
view.addSubview(loginButton)
getFacebookUserInfo()
}
func loginButtonDidLogOut(_ loginButton: FBSDKLoginButton!) {
print("loginButtonDidLogOut")
imageView.image = UIImage(named: "fb-art.jpg")
label.text = "Not Logged In"
}
func loginButton(_ loginButton: FBSDKLoginButton!, didCompleteWith result: FBSDKLoginManagerLoginResult!, error: Error!) {
print("didCompleteWith")
getFacebookUserInfo()
}
func getFacebookUserInfo() {
if(FBSDKAccessToken.current() != nil)
{
//print permissions, such as public_profile
print(FBSDKAccessToken.current().permissions)
let graphRequest = FBSDKGraphRequest(graphPath: "me", parameters: ["fields" : "id, name, email"])
let connection = FBSDKGraphRequestConnection()
connection.add(graphRequest, completionHandler: { (connection, result, error) -> Void in
let data = result as! [String : AnyObject]
self.label.text = data["name"] as? String
let FBid = data["id"] as? String
let url = NSURL(string: "https://graph.facebook.com/\(FBid!)/picture?type=large&return_ssl_resources=1")
self.imageView.image = UIImage(data: NSData(contentsOf: url! as URL)! as Data)
})
connection.start()
}
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}
Original post (January 14, 2016) - Swift 2.1.1 (Xcode 7.2)
import UIKit
import FBSDKLoginKit
class ViewController: UIViewController, FBSDKLoginButtonDelegate {
var imageView : UIImageView!
var label: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
imageView = UIImageView(frame: CGRectMake(0, 0, 100, 100))
imageView.center = CGPoint(x: view.center.x, y: 200)
imageView.image = UIImage(named: "fb-art.jpg")
view.addSubview(imageView)
label = UILabel(frame: CGRectMake(0,0,200,30))
label.center = CGPoint(x: view.center.x, y: 300)
label.text = "Not Logged In"
label.textAlignment = NSTextAlignment.Center
view.addSubview(label)
let loginButton = FBSDKLoginButton()
loginButton.center = CGPoint(x: view.center.x, y: 400)
loginButton.delegate = self
view.addSubview(loginButton)
getFacebookUserInfo()
}
func loginButton(loginButton: FBSDKLoginButton!, didCompleteWithResult result: FBSDKLoginManagerLoginResult!, error: NSError!) {
print("didCompleteWithResult")
getFacebookUserInfo()
}
func loginButtonDidLogOut(loginButton: FBSDKLoginButton!) {
print("loginButtonDidLogOut")
imageView.image = UIImage(named: "fb-art.jpg")
label.text = "Not Logged In"
}
func getFacebookUserInfo() {
if(FBSDKAccessToken.currentAccessToken() != nil)
{
//print permissions, such as public_profile
print(FBSDKAccessToken.currentAccessToken().permissions)
let graphRequest = FBSDKGraphRequest(graphPath: "me", parameters: ["fields" : "id, name, email"])
graphRequest.startWithCompletionHandler({ (connection, result, error) -> Void in
self.label.text = result.valueForKey("name") as? String
let FBid = result.valueForKey("id") as? String
let url = NSURL(string: "https://graph.facebook.com/\(FBid!)/picture?type=large&return_ssl_resources=1")
self.imageView.image = UIImage(data: NSData(contentsOfURL: url!)!)
})
}
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}
Result:
When the app is started:
Related Information:
Facebook SDK for iOS - Getting Started
Facebook SDK and Swift - Get Facebook SDK Version
Facebook SDK for iOS Changelog (SDK Version History)
Facebook Login Review Guide (App review by Facebook is required in some conditions.)
Facebook SDK and Swift - Post a message and an image to Facebook
Facebook SDK and Swift - Post a message using Graph API and post an image using FBSDKShareKit
Facebook SDK and Swift - Create a custom login button programmatically
Google Sign-In for iOS - Display User Email and Profile Picture
Really helpful, thanks!
ReplyDeleteThanks a bunch! I had been pondering for hours on this!!
ReplyDeleteLot of thanks!!!
ReplyDelete2 days search how to get icon )