1.集成并測試facebook
1.注冊開發(fā)者賬號
登陸facebook開發(fā)者平臺 (https://developers.facebook.com/)耕拷, 注冊facebook開發(fā)者賬號。
2.創(chuàng)建應用
- 1.點擊 (https://developers.facebook.com/) 右上角的My Apps按鈕末秃,在彈出的下拉菜單中陡叠,選擇Add a New App。
- 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.在項目中新建名稱為Frameworks的Group。
- 2.打開下載的SDK的目錄 ~/Documents/FacebookSDK晌坤,
并拖拽
Bolts.framework
FBSDKCoreKit.Framework,
FBSDKLoginKit.Framework,
FBSDKShareKit.Framework
到項目的Frameworks組中逢艘。在拖拽選項中選擇Copy items if needed和Create 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,此時要要連接AppDelegate和FBSDKApplicationDelegate黔攒。在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(很重要)
在 Xcode8 和 iOS 10 的情況下,還需要做一步操作不傅,那就是打開Keychain赏胚。
在Xcode左側導航欄最上面,點擊“項目名稱”觉阅,在右側面板中選擇Capabilities秘车,在下面找到Keychain Sharing叮趴,點擊ON按鈕。
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.m和Appdelegate.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的登陸按鈕琢蛤。
- 3.點擊登錄按鈕抛虏,就會跳轉到登錄界面:
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審核通過塌鸯,至于如何審核,請看下面的審核流程丙猬!
參考
- 創(chuàng)建facebook應用參考:http://bbs.mob.com/thread-43-1-5.html
- facebook審核流程參考:http://bbs.mob.com/forum.php?mod=viewthread&tid=19104&page=1&extra=#pid40942