Facebook第三方登錄

1.集成并測試facebook

1.注冊開發(fā)者賬號

登陸facebook開發(fā)者平臺 (https://developers.facebook.com/)耕拷, 注冊facebook開發(fā)者賬號。

2.創(chuàng)建應用

  • 2.選擇iOS平臺
  • 3.輸入APP的名稱枉阵,選擇Create New Facebook App ID
  • 4.選擇APP類別,點擊創(chuàng)建應用編號兴溜。

3.下載SDK

在該界面中點擊按鈕下載SDK,或者在
https://developers.facebook.com/docs/ios中下載iOS平臺的SDK拙徽。

4.配置APP在facebook中的信息

  • 1.點擊右上角My Apps刨沦,進入Dashboard界面。
    此時可以看到AppID和AppSecret斋攀,記住這兩個值已卷,之后要用到。(如果AppSecret是加密的話淳蔼,點擊旁邊的show即可看到值)
  • 2.點擊Dashboard左邊的Settings選項侧蘸,點擊+ Add Platform裁眯。



  • 3.選擇iOS平臺。



  • 4.輸入Bundle ID讳癌。
  • 5.設置Single Sign(單點登錄)為on穿稳。
  • 6.選擇是否打開自動記錄 iOS 應用內購買事件(選填)
  • 7.點擊保存Save Changes



4.集成SDK到XCode中

  • 1.在項目中新建名稱為FrameworksGroup
  • 2.打開下載的SDK的目錄 ~/Documents/FacebookSDK晌坤,
    并拖拽
    Bolts.framework
    FBSDKCoreKit.Framework,
    FBSDKLoginKit.Framework,
    FBSDKShareKit.Framework

    到項目的Frameworks組中逢艘。在拖拽選項中選擇Copy items if neededCreate groups

5.配置Xcode工程

右鍵點擊Info.plist文件骤菠,選擇Open As Source Code它改。

5.1.設置URLSchemes
  • 復制粘貼以下片段到XML的body中<dict>...</dict>
<key>CFBundleURLTypes</key>
<array>
  <dict>
  <key>CFBundleURLSchemes</key>
  <array>
    <string>fb{your-app-id}</string>
  </array>
  </dict>
</array>
<key>FacebookAppID</key>
<string>{your-app-id}</string>
<key>FacebookDisplayName</key>
<string>{your-app-name}</string>

將 fb{your-app-id} 替換為 Facebook 應用編號,加上前綴 fb商乎。例如央拖,fb123456。您可以通過 Facebook 應用面板找到應用編號鹉戚。

使用應用編號替換 {your-app-id}

使用您在應用面板中指定的顯示名稱替換 {your-app-name}

5.2.Facebook加入網(wǎng)絡白名單
  • iOS9要配置App Transport Security鲜戒,把Facebook加入白名單,打開Info.plist抹凳,添加以下片段遏餐。
<key>NSAppTransportSecurity</key>
<dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>facebook.com</key>
        <dict>
            <key>NSIncludesSubdomains</key>
            <true/>
            <key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
            <false/>
        </dict>
        <key>fbcdn.net</key>
        <dict>
            <key>NSIncludesSubdomains</key>
            <true/>
            <key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
            <false/>
        </dict>
        <key>akamaihd.net</key>
        <dict>
            <key>NSIncludesSubdomains</key>
            <true/>
            <key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
            <false/>
        </dict>
    </dict>
</dict>
5.3.設置應用跳轉白名單
  • 如果使用了facebook的登陸分享功能,需要跳轉到facebook的APP赢底,同樣也要在.plist文件中處理一下失都。
<key>LSApplicationQueriesSchemes</key>
<array>
  <string>fbapi</string>
  <string>fb-messenger-api</string>
  <string>fbauth2</string>
  <string>fbshareextension</string>
</array>

6.添加系統(tǒng)資源庫

點擊target->General->Linked Frameworks and Libraries,點擊左下角的+號按鈕颖系,依次添加以下系統(tǒng)資源庫

Security.framework
libiconv.dylib
SystemConfiguration.framework
CoreGraphics.Framework
libsqlite3.dylib
CoreTelephony.framework
libstdc++.dylib
libz.dylib
Accounts.framework

7.連接Application Delegate

在facebook登錄或者分享過程中嗅剖,會打開facebook APP或者跳轉到Safari,此時要要連接AppDelegateFBSDKApplicationDelegate黔攒。在AppDelegate.swift中添加以下代碼:

#import <FBSDKCoreKit/FBSDKCoreKit.h>

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
  [[FBSDKApplicationDelegate sharedInstance] application:application
    didFinishLaunchingWithOptions:launchOptions];
  return YES;
}

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
  return [[FBSDKApplicationDelegate sharedInstance] application:application
    openURL:url
    sourceApplication:sourceApplication
    annotation:annotation
  ];
}

swift版本

import FBSDKCoreKit
import FBSDKLoginKit

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

@available(iOS 9.0, *)
func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {        
    return FBSDKApplicationDelegate.sharedInstance().application(app, open: url, options: options)
}
// iOS8
func application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject) -> Bool {
    return FBSDKApplicationDelegate.sharedInstance().application(application, openURL: url, sourceApplication: sourceApplication, annotation: annotation)
}

8.打開Keychain(很重要)

Xcode8iOS 10 的情況下,還需要做一步操作不傅,那就是打開Keychain赏胚。
在Xcode左側導航欄最上面,點擊“項目名稱”觉阅,在右側面板中選擇Capabilities秘车,在下面找到Keychain Sharing叮趴,點擊ON按鈕。

Keychain.png
9.添加應用程序事件(Events)(非必選)

當用戶安裝或者使用APP的時候眯亦,有些事件數(shù)據(jù)可以被統(tǒng)計般码,可以在facebook的分析面板中查看 (https://www.facebook.com/analytics?__aref_src=devsite&__aref_id=docs_ios_getting_started).

記錄APP激活,在AppDelegate.m添加以下代碼:

//  AppDelegate.m
#import <FBSDKCoreKit/FBSDKCoreKit.h>
- (void)applicationDidBecomeActive:(UIApplication *)application {
  [FBSDKAppEvents activateApp];
}

swift代碼:

func applicationDidBecomeActive(application: UIApplication) {
    FBSDKAppEvents.activateApp()
}

10.測試登陸

1.導入頭文件

swift項目中舌涨,在橋接文件中添加導入頭文件代碼扔字。如果是objc的話,在你的ViewController.mAppdelegate.m中導入頭文件革为。

#import <FBSDKCoreKit/FBSDKCoreKit.h>
#import <FBSDKLoginKit/FBSDKLoginKit.h>
2.添加相應代碼
  • 1.在ViewController.swift中的viewDidLoad方法中添加以下代碼:
let loginBtn: FBSDKLoginButton = FBSDKLoginButton()
loginBtn.center = self.view.center
view.addSubview(loginBtn)
  • 2.現(xiàn)在編譯并運行你的APP,就可以看到facebook的登陸按鈕琢蛤。
Facebook登錄按鈕
  • 3.點擊登錄按鈕抛虏,就會跳轉到登錄界面:
facebook登錄頁面

10.自定義登錄按鈕

大多數(shù)情況下,我們希望能夠自定義facebook的登陸按鈕慕淡,在按鈕的點擊事件方法中沸毁,寫入以下代碼:

/// 按鈕監(jiān)聽方法
func facebookBtnClick() {
    
    // 打開 FBSDKProfile 自動追蹤 FBSDKAccessToken
    FBSDKProfile.enableUpdates(onAccessTokenChange: true)
    // 清空FBSDKAccessToken
    FBSDKAccessToken.setCurrent(nil)
    
    // 登錄
    let loginManager: FBSDKLoginManager = FBSDKLoginManager()
    loginManager.logOut() // 先退出登錄
    loginManager.loginBehavior = .native // 優(yōu)先客戶端方式
    loginManager.logIn(withReadPermissions: ["public_profile"], from: self) { (result, error) -> Void in
        
        guard let res = result else {
            return
        }
        
        if error != nil {
            print("Process error")
        } else if res.isCancelled {
            print("Cancelled")
        } else {
            // 獲取userID和token
            print("userID: \(res.token.userID), token: \(res.token.tokenString)")
            print("FBSDKProfile.current(): \(FBSDKProfile.current())")
        }
    }
}

如果想要進一步獲取用戶信息,比如用戶名和頭像等携兵,需要添加通知,監(jiān)聽用戶登錄獲取徐紧。

override func viewDidLoad() {
    super.viewDidLoad()
    
    NotificationCenter.default.addObserver(
        forName: NSNotification.Name.FBSDKProfileDidChange,
        object: nil, queue: nil) { (Notification) in
            
            // 進一步獲取用戶信息
            if let profile = FBSDKProfile.current() {
                print("profile.userID: \(profile.userID)")
                print("profile.name: \(profile.name)")
                let url = profile.imageURL(for: FBSDKProfilePictureMode.normal, size: CGSize(width: 200, height: 200))
                print("url: \(url)")
            }
    }
}

/// 移除監(jiān)聽
deinit {
    NotificationCenter.default.removeObserver(self, name: NSNotification.Name.FBSDKProfileDidChange, object: nil)
}

11. 登錄評審

一般情況下,使用第三方登錄拂檩,只需要****public_profile, email and user_friends****這三種權限就可以了死遭,此時在app的設置頁需要填寫聯(lián)系郵箱才能擁有這些權限。這種情況下呀潭,不需要facebook的審核,就可以使用了钠署。

如果你的應用需要請求public_profile, email and user_friends之外的額外需求,在你發(fā)布應用之前舰蟆,F(xiàn)acebook需要進行評審。

注意:只能是注冊應用的開發(fā)者賬號才能做分享身害,如果要所有的賬號都可以使用的話,需要把注冊的應用提交給facebook審核通過塌鸯,至于如何審核,請看下面的審核流程丙猬!

參考

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末费韭,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子星持,更是在濱河造成了極大的恐慌,老刑警劉巖羹令,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件损痰,死亡現(xiàn)場離奇詭異卢未,居然都是意外死亡,警方通過查閱死者的電腦和手機辽社,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來戳葵,“玉大人,你說我怎么就攤上這事拱烁∝洌” “怎么了?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵擅笔,是天一觀的道長。 經常有香客問我猛们,道長狞洋,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任徘铝,我火速辦了婚禮,結果婚禮上怕午,老公的妹妹穿的比我還像新娘。我一直安慰自己郁惜,他們只是感情好甲锡,可當我...
    茶點故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著缤沦,像睡著了一般。 火紅的嫁衣襯著肌膚如雪包蓝。 梳的紋絲不亂的頭發(fā)上驶社,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天亡电,我揣著相機與錄音硅瞧,去河邊找鬼。 笑死腕唧,一個胖子當著我的面吹牛,可吹牛的內容都是我干的四苇。 我是一名探鬼主播,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼蟀架,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了片拍?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤捌省,失蹤者是張志新(化名)和其女友劉穎碉钠,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體喊废,經...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年工闺,在試婚紗的時候發(fā)現(xiàn)自己被綠了瓣蛀。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡惋增,死狀恐怖,靈堂內的尸體忽然破棺而出诈皿,到底是詐尸還是另有隱情钩杰,我是刑警寧澤诊县,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站措左,受9級特大地震影響依痊,放射性物質發(fā)生泄漏怎披。R本人自食惡果不足惜胸嘁,卻給世界環(huán)境...
    茶點故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一凉逛、第九天 我趴在偏房一處隱蔽的房頂上張望性宏。 院中可真熱鬧状飞,春花似錦毫胜、人聲如沸诬辈。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至缺脉,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間攻礼,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工秘蛔, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留傍衡,地道東北人。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓倦畅,卻偏偏與公主長得像,于是被迫代替她去往敵國和親叠赐。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,577評論 2 353

推薦閱讀更多精彩內容

  • 發(fā)現(xiàn) 關注 消息 iOS 第三方庫赛不、插件、知名博客總結 作者大灰狼的小綿羊哥哥關注 2017.06.26 09:4...
    肇東周閱讀 12,093評論 4 62
  • WebSocket-Swift Starscream的使用 WebSocket 是 HTML5 一種新的協(xié)議踢故。它實...
    香橙柚子閱讀 23,848評論 8 183
  • 生活不如意之處十之八九殿较,沒有一帆風順的人生,好多的不幸運都是我們打腦里臆想出來的一些困擾自己的情緒淋纲。 如果你正在不...
    金丫丫閱讀 91評論 0 1
  • 剛聽聞你去世的消息院究,已經過去了一個月,那時我剛巧在和朋友逛街儡首,開心的吃吃喝喝,收到弟弟打來的電話蔬胯。開始楞著不知如何...
    9807115ff8e3閱讀 273評論 0 0
  • 1.繪制線稿氛濒,先畫一張模糊的吉娃娃的線稿 2.從內層葉片開始上色,先用玫瑰花色和足量水調和舞竿,從葉尖開始上色。然后將...
    桔紗閱讀 978評論 5 15