facebook login with swift 3
13,972
Solution 1
Here is the code for login the Facebook by a UIButton
click.
Step 1: Copy this code into your class file:
import UIKit
import FBSDKShareKit
import FBSDKLoginKit
import FBSDKCoreKit
class Facebook_loginPageViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
}
override func didReceiveMemoryWarning(){
super.didReceiveMemoryWarning()
}
@IBAction func login(_ sender: Any) {
self.facebooklogin()
}
func facebooklogin() {
let fbLoginManager : FBSDKLoginManager = FBSDKLoginManager()
fbLoginManager.logIn(withReadPermissions: ["email"], handler: { (result, error) -> Void in
print("\n\n result: \(result)")
print("\n\n Error: \(error)")
if (error == nil) {
let fbloginresult : FBSDKLoginManagerLoginResult = result!
if(fbloginresult.isCancelled) {
//Show Cancel alert
} else if(fbloginresult.grantedPermissions.contains("email")) {
self.returnUserData()
//fbLoginManager.logOut()
}
}
})
}
func returnUserData() {
let graphRequest : FBSDKGraphRequest = FBSDKGraphRequest(graphPath: "me", parameters: ["fields":"email,name"])
graphRequest.start(completionHandler: { (connection, result, error) -> Void in
if ((error) != nil) {
// Process error
print("\n\n Error: \(error)")
} else {
let resultDic = result as! NSDictionary
print("\n\n fetched user: \(result)")
if (resultDic.value(forKey:"name") != nil) {
let userName = resultDic.value(forKey:"name")! as! String as NSString?
print("\n User Name is: \(userName)")
}
if (resultDic.value(forKey:"email") != nil) {
let userEmail = resultDic.value(forKey:"email")! as! String as NSString?
print("\n User Email is: \(userEmail)")
}
}
})
}
}
Step 2: In AppDelegate
add the id of Facebook:
import UIKit
import FBSDKShareKit
import FBSDKLoginKit
import FBSDKCoreKit
class AppDelegate: UIResponder, UIApplicationDelegate {
func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
let str_URL = url.absoluteString as NSString
if str_URL.contains("fb1111111111111111")// put you id here {
return FBSDKApplicationDelegate.sharedInstance().application(
app,
open: url as URL!,
sourceApplication: options[UIApplicationOpenURLOptionsKey.sourceApplication] as! String,
annotation: options[UIApplicationOpenURLOptionsKey.annotation])
}
return FBSDKApplicationDelegate.sharedInstance().application(
app,
open: url as URL!,
sourceApplication: options[UIApplicationOpenURLOptionsKey.sourceApplication] as! String,
annotation: options[UIApplicationOpenURLOptionsKey.annotation])
}
}
Updated Code :App Delegate
func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
let str_URL = url.absoluteString as NSString
if str_URL.contains("fb111111111111111"){
return FBSDKApplicationDelegate.sharedInstance().application(
app,
open: url as URL?,
sourceApplication: options[UIApplication.OpenURLOptionsKey.sourceApplication] as! String,
annotation: options[UIApplication.OpenURLOptionsKey.annotation])
}
return FBSDKApplicationDelegate.sharedInstance().application(
app,
open: url as URL?,
sourceApplication: options[UIApplication.OpenURLOptionsKey.sourceApplication] as! String,
annotation: options[UIApplication.OpenURLOptionsKey.annotation])
}
}
Step 3: put this code into `info.plist'
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleURLSchemes</key>
<array>
<string>fb1111111111111111</string>
</array>
</dict>
</array>
<key>CFBundleVersion</key>
<string>2</string>
<key>FacebookAppID</key>
<string>1111111111111111</string>
<key>FacebookDisplayName</key>
<string>Together Deal</string>
<key>LSApplicationQueriesSchemes</key>
<array>
<string>fbapi</string>
<string>fb-messenger-api</string>
<string>fbauth2</string>
<string>fbshareextension</string>
</array>
Solution 2
Here is the code of
1. ViewController.swift
import UIKit
import FacebookLogin
import FBSDKLoginKit
class ViewController: UIViewController {
var dict : [String : AnyObject]!
override func viewDidLoad() {
super.viewDidLoad()
//creating button
let loginButton = LoginButton(readPermissions: [ .publicProfile ])
loginButton.center = view.center
//adding it to view
view.addSubview(loginButton)
//if the user is already logged in
if let accessToken = FBSDKAccessToken.current(){
getFBUserData()
}
}
//when login button clicked
@objc func loginButtonClicked() {
let loginManager = LoginManager()
loginManager.logIn([ .publicProfile ], viewController: self) { loginResult in
switch loginResult {
case .failed(let error):
print(error)
case .cancelled:
print("User cancelled login.")
case .success(let grantedPermissions, let declinedPermissions, let accessToken):
self.getFBUserData()
}
}
}
//function is fetching the user data
func getFBUserData(){
if((FBSDKAccessToken.current()) != nil){
FBSDKGraphRequest(graphPath: "me", parameters: ["fields": "id, name, picture.type(large), email"]).start(completionHandler: { (connection, result, error) -> Void in
if (error == nil){
self.dict = result as! [String : AnyObject]
print(result!)
print(self.dict)
}
})
}
}
}
2. AppDelegate.swift
import UIKit
import FBSDKLoginKit
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
//added these 3 methods
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
return FBSDKApplicationDelegate.sharedInstance().application(application, didFinishLaunchingWithOptions: launchOptions)
}
func applicationWillResignActive(_ application: UIApplication) {
FBSDKAppEvents.activateApp()
}
func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool {
return FBSDKApplicationDelegate.sharedInstance().application(application, open: url, sourceApplication: sourceApplication, annotation: annotation)
}
func applicationDidEnterBackground(_ application: UIApplication) {
}
func applicationWillEnterForeground(_ application: UIApplication) {
}
func applicationDidBecomeActive(_ application: UIApplication) {
}
func applicationWillTerminate(_ application: UIApplication) {
}
}
Source: Facebook Login Swift 3 Tutorial
Author by
Johny D Good
Updated on June 04, 2022Comments
-
Johny D Good about 2 years
please help me with Facebook login
I've started with putting into pod
pod 'FacebookCore' pod 'FacebookLogin' pod 'FacebookShare' and then run pod install
after this i've imported this into my viewController
import UIKit import FacebookCore import FacebookLogin class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. let loginButton = LoginButton(readPermissions: [ .publicProfile ]) loginButton.center = view.center view.addSubview(loginButton) } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } }
I updated info.plist with Facebook data
how Do i get user basic profile data once user has authorized app? What goes in AppDelegate file?
thanks