// ===== Info.plist (部份) =====

 

    <!-- Facebook -->

    <key>CFBundleURLTypes</key>

    <array>

        <dict>

            <key>CFBundleURLSchemes</key>

            <array>

                <string>fb取代成fbID</string>

            </array>

        </dict>

    </array>

    <key>FacebookAppID</key>

    <string>取代成fbID</string>

    <key>FacebookDisplayName</key>

    <string>取代成FBAppName</string>

    <key>LSApplicationQueriesSchemes</key>

    <array>

        <string>fbauth2</string>

        <string>fbapi</string>

        <string>fb-messenger-api</string>

        <string>fbshareextension</string>

    </array>

    

    <key>NSAppTransportSecurity</key>

    <dict>

        <key>NSAllowsArbitraryLoads</key>

        <true/>

    </dict>

 

 

// ===== AppDelegate.swift =====

import UIKit

import FBSDKCoreKit

import FBSDKLoginKit

import FBSDKShareKit

 

@UIApplicationMain

class AppDelegate: UIResponder, UIApplicationDelegate {

    

    var window: UIWindow?

    

    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {

        

        FBSDKApplicationDelegate.sharedInstance().application(application, didFinishLaunchingWithOptions: launchOptions)

        

        return true

    }

    

    func application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject) -> Bool {

        

        return FBSDKApplicationDelegate.sharedInstance().application(application, openURL: url, sourceApplication: sourceApplication, annotation: annotation)

    }

    

    func applicationWillResignActive(application: UIApplication) {

    

    }

    

    func applicationDidEnterBackground(application: UIApplication) {

 

    }

    

    func applicationWillEnterForeground(application: UIApplication) {

 

    }

    

    func applicationDidBecomeActive(application: UIApplication) {

        

        FBSDKAppEvents.activateApp()

    }

    

    func applicationWillTerminate(application: UIApplication) {

 

    }

    

}

 
 
// ===== ViewController.swift ===== 

 

import UIKit

import AssetsLibrary

import FBSDKCoreKit

import FBSDKLoginKit

 

class ViewController: BaseViewController, FBSDKLoginButtonDelegate {

 

    // === UI ===

    

    @IBOutlet weak var fbLoginButton: FBSDKLoginButton!

    @IBOutlet weak var fbProfilePictureView: FBSDKProfilePictureView!

 

    override func viewDidLoad() {

        super.viewDidLoad()

        

        fbLoginButton.delegate = self

        fbLoginButton.readPermissions = ["public_profile", "email"]

        

        fbProfilePictureView.profileID = "me"

        FBSDKProfile.enableUpdatesOnAccessTokenChange(true)

        

        let notificationCenter = NSNotificationCenter.defaultCenter()

        

        notificationCenter.addObserver(self, selector: #selector(fbLoginHandler), name: FBSDKAccessTokenDidChangeNotification, object: nil)

        notificationCenter.addObserver(self, selector: #selector(fbProfileHandler), name: FBSDKProfileDidChangeNotification, object: nil)

    }

 

    // === Facebook ===

    

    /**

     登入或登出狀態變更

     

     - parameter notification: notification description

     */

    func fbLoginHandler(notification: NSNotification)

    {

        print(#function)

        

        // 已登入FB

        if let fbToken = FBSDKAccessToken.currentAccessToken() {

            

            print("已登入FB")

            print(fbToken.userID)

        }

        else

        {

            print("登出FB")

        }

    }

    

    /**

     Profile狀態變更

     

     - parameter notification: notification description

     */

    func fbProfileHandler(notification: NSNotification)

    {

        guard let _ = FBSDKProfile.currentProfile() else {

            return

        }

        

        if let _ = FBSDKAccessToken.currentAccessToken() {

            

            let parameter = ["fields": "id,name,email"]

            let fbRequest = FBSDKGraphRequest(graphPath: "me", parameters: parameter)

            

            

            fbRequest.startWithCompletionHandler({ (connection, result, error) in

                

                guard error == nil else {

                    

                    print(error.localizedDescription)

                    return

                }

                

                guard let info = result as? NSDictionary else {

                    print("result is nil")

                    return

                }

                

                print(info)

                

            })

            

        }

    }

    

    /**

     登入事件

     

     - parameter loginButton: loginButton description

     - parameter result:      result description

     - parameter error:       error description

     */

    func loginButton(loginButton: FBSDKLoginButton!, didCompleteWithResult result: FBSDKLoginManagerLoginResult!, error: NSError!)

    {

        // 同意的權限

        guard let permissions = result.grantedPermissions else {

            return

        }

        

        for item in permissions

        {

            print(item)

        }

        

        print(result)

    }

    

    /**

     登出事件

     

     - parameter loginButton: loginButton description

     */

    func loginButtonDidLogOut(loginButton: FBSDKLoginButton!)

    {

        print(#function)

    }

}

 

參考資料:

https://developers.facebook.com/docs/facebook-login/permissions#reference-email

https://developers.facebook.com/docs/facebook-login/permissions/overview

https://developers.facebook.com/docs/facebook-login/ios/advanced

https://developers.facebook.com/docs/facebook-login/ios

https://developers.facebook.com/docs/ios/ios9

https://developers.facebook.com/docs/ios

arrow
arrow
    全站熱搜

    小賢 發表在 痞客邦 留言(0) 人氣()