Search code examples
swift3ios8

facebook login with swift 3


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


Solution

  • 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>