現代人已經離不開臉書,大部分的人每天黏在臉書獲取資訊與互動朋友,於是會有許多資料放在臉書中,因而成為其它服務平台的媒介,減少重複輸入個人資料的行為,於是一鍵登入我們很熟悉!同時方便使用者與開發者~
先前有使用iOS SDK直接取得臉書帳號授權,可惜只能拿到ID與name,現在想取得使用者的email,只好使用Facebook SDK取得帳號資料!
由於各種可能的因素,使得SDK持續修改與更新,有必要表明本文是使用FacebookSDKs-iOS-20150910和Graph-API (v2.4)。
官方文件教學:Facebook Login for iOS – Getting Started,已清楚描述如何使用Facebook SDK,在此節錄我操作的過程。
Facebook開發者後台
申請App ID,供專案程式使用。接著有一系列的教學步驟,跟著一步一步走下去,就能設定好Xcode中所需的資料喔!
info.plist
<key>CFBundleURLTypes</key> <array> <dict> <key>CFBundleURLSchemes</key> <array> <string>fb(HappyTestID)</string> </array> </dict> </array> <key>LSApplicationQueriesSchemes</key> <array> <string>fbauth2</string> </array> <key>NSAppTransportSecurity</key> <dict> <key>NSExceptionDomains</key> <dict> <key>akamaihd.net</key> <dict> <key>NSExceptionRequiresForwardSecrecy</key> <false/> <key>NSIncludesSubdomains</key> <true/> </dict> <key>facebook.com</key> <dict> <key>NSExceptionRequiresForwardSecrecy</key> <false/> <key>NSIncludesSubdomains</key> <true/> </dict> <key>fbcdn.net</key> <dict> <key>NSExceptionRequiresForwardSecrecy</key> <false/> <key>NSIncludesSubdomains</key> <true/> </dict> </dict> </dict> <key>FacebookAppID</key> <string>(HappyTestID)</string> <key>FacebookDisplayName</key> <string>HappyTest</string>
Xcode中view controller:
(void)viewDidLoad { [super viewDidLoad]; FBSDKLoginButton *loginButton = [[FBSDKLoginButton alloc] init]; loginButton.delegate = self; loginButton.center = self.view.center; [self.view addSubview:loginButton]; loginButton.readPermissions = @[@"public_profile", @"email", @"user_friends"]; } #pragma mark - FBSDKLoginButtonDelegate -(void)loginButton:(FBSDKLoginButton *)loginButton didCompleteWithResult:(FBSDKLoginManagerLoginResult *)result error:(NSError *)error { FBSDKGraphRequest *request = [[FBSDKGraphRequest alloc] initWithGraphPath:@"me" parameters:@{@"fields" : @"email, name, first_name, last_name"} HTTPMethod:@"GET"]; [request startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) { // Handle the result }]; } -(void)loginButtonDidLogOut:(FBSDKLoginButton *)loginButton { } -(BOOL)loginButtonWillLogin:(FBSDKLoginButton *)loginButton { return YES; }
編譯執行後一開始畫面如最上面那張圖。
按登入後取得的資訊(loginButton:didCompleteWithResult:):
(lldb) po result.token.appID
(HappyTestID)
(lldb) po result.token.declinedPermissions
{(
)}
(lldb) po result.token.expirationDate
2015-12-01 08:00:29 +0000
(lldb) po result.token.refreshDate
2015-10-02 08:01:02 +0000
(lldb) po result.token.tokenString
CAAGMyzLg5d0BAAkFjg04q9tqZB4EPQPNSsWzeXrq2H2eJBmVbOD9uwxC9nZCajdNN9Sg99d75zP118yfESHd1XURjyQQLS8TtqDl7DViFktJfF93VnR3ZBk4lGCke2gVWuc4frr7E4gI9EdZAQ1TsFPudlTyG2dao28Dwl70PWsGd3XZASK9lMxZBZBJby4fYwZC0bSF5GGUn03VlZBK0DFB4xOQnTQoBkxAZD
(lldb) po result.token.userID
(HappyUserID)
(lldb) po result.grantedPermissions
{(
email,
“contact_email",
“user_friends",
“public_profile"
)}
(lldb) po result.declinedPermissions
{(
)}
若要取得email,則須再使用Graph API(startWithCompletionHandler):
Printing description of result:
{
email = “happyman.cg@gmail.com";
“first_name" = HappyWen;
id = (HappyUserID);
“last_name" = Chiou;
name = “HappyWen Chiou";
}
想要什麼樣的資料,查詢開發者文件來設定readPermissions。
參考:
Comments on: "[iOS] Facebook SDK 取得帳號資料" (1)
[…] iOS 上加入 Facebook 登入功能、Facebook SDK 取得帳號資料、使用臉書獲取使用者資料 (Using Facebook to Obtain User […]
讚讚