Just a Computer Graphics Studio & My Life

現代人已經離不開臉書,大部分的人每天黏在臉書獲取資訊與互動朋友,於是會有許多資料放在臉書中,因而成為其它服務平台的媒介,減少重複輸入個人資料的行為,於是一鍵登入我們很熟悉!同時方便使用者開發者

Facebook SDK login

這是Facebook SDK內建的按鈕樣式

先前有使用iOS SDK直接取得臉書帳號授權,可惜只能拿到ID與name,現在想取得使用者的email,只好使用Facebook SDK取得帳號資料

由於各種可能的因素,使得SDK持續修改與更新,有必要表明本文是使用FacebookSDKs-iOS-20150910和Graph-API (v2.4)。

官方文件教學:Facebook Login for iOS – Getting Started,已清楚描述如何使用Facebook SDK,在此節錄我操作的過程。

Facebook開發者後台

Facebook SDK developer

申請App ID,供專案程式使用。接著有一系列的教學步驟,跟著一步一步走下去,就能設定好Xcode中所需的資料喔!

info.plist

Facebook SDK 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;
}

編譯執行後一開始畫面如最上面那張圖。

Facebook SDK login2

準備登出

Facebook SDK login4

點擊登入後,要求帳號授權,iOS9會直接在view controller內present網頁,iOS8以前則跳出app,開啟瀏覽器。

Facebook SDK login3

確認想提供的資訊

Facebook SDK login5

已經授權過

按登入後取得的資訊(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。

參考:

Advertisements

發表留言

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 / 變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 / 變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 / 變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 / 變更 )

連結到 %s

標籤雲

%d 位部落客按了讚: