Showing posts with label facebook. Show all posts
Showing posts with label facebook. Show all posts

Tuesday, June 21, 2011

Facebook: authentication and error handling

認證的種類
1. server-side flow: 指令由自己的server端發出
2. client-side flow: 指令由client端發出(ex: 瀏覽器, 手機app, 桌面app)

認證三步驟
1. 使用者認證(user authentication)
- 顯示接下來希望能獲得授權的app名稱, 並且讓使用者輸入帳號密碼來驗證身分

2. app授權(app authorization)
- 顯示這個app將會提供使用者什麼功能並且會需要使用哪些個人資料

3. app認證(app authentication)
- 使用者同意授與app存取資料的權限

什麼是access token?
access token是用來透過graph api向facebook下指令時所需的東西, 在app完成認證之後就能夠獲得.

server-side flow
1. 拿authorization code
REQUEST: https://www.facebook.com/dialog/oauth?client_id=YOUR_APP_ID&redirect_uri=YOUR_URL&scope=read_stream
REDIRECT TO: http://YOUR_URL?code=A_CODE_GENERATED_BY_SERVER

2. 拿access token
REQUEST: https://graph.facebook.com/oauth/access_token?client_id=YOUR_APP_ID&redirect_uri=YOUR_URL&client_secret=YOUR_APP_SECRET&code=THE_CODE_FROM_ABOVE
RESPONSE: access_token=YOUR_ACCESS_TOKEN&expires=EXPIRE_TIME


client-side flow
拿access token

REQUEST: https://www.facebook.com/dialog/oauth?client_id=YOUR_APP_ID&redirect_uri=YOUR_URL&scope=read_stream&response_type=token
REDIRECT TO: http://YOUR_URL#access_token=166942940015970%7C2.sa0&expires_in=64090


什麼情況下access token會無效?
1. token過期 (一般情況下使用期限是2小時)
- 使用者曾經同意app的存取權, 但超過當初授予此token所限訂的使用期限.
- 當app利用此token透過graph api下指令時, 會收到HTTP 400的回應並且得到以下錯誤訊息
{
error: {
type: "OAuthException",
message: "Session has expired at unix time
SOME_TIME. The current unix time is SOME_TIME.”
},
}


2. 使用者更改密碼
- 使用者曾經同意app的存取權, 但之後換了密碼
- 當app利用此token透過graph api下指令時, 會收到HTTP 400的回應並且得到以下錯誤訊息
{
error: {
type: "OAuthException",
message: "The session has been invalidated because
the user has changed the password.",
},
}


3. 使用者變更app的存取權限
- 使用者曾經同意app的存取權, 但後來進入app管理頁面取消權限(如下圖)

- 當app利用此token透過graph api下指令時, 會收到HTTP 400的回應並且得到以下錯誤訊息
{
error: {
type: "OAuthException",
message: "Error validating access token: USER_ID
has not authorized application APP_ID",
},
}


4. 使用者登出facebook
- 使用者曾經同意app的存取權(app並未取得offline_access的能力), 但之後使用者登出
- 當app利用此token透過graph api下指令時, 會收到HTTP 400的回應並且得到以下錯誤訊息
{
"error": {
"type":"OAuthException","message":"Error validating
access token: The session is invalid because the user logged out."
}
}


access token無效該如何處理?
首先要注意的就是在下每個graph api指令時都要檢查是否有錯誤發生. 確認是token失效的問題之後就要重新取得認證. (只是單純的過期, 則只需要再次登入, 若是使用者收回了app存取權, app就需要重新獲得授權)

參考資料
1. How-To: Handle expired access tokens
2. Authentication

Thursday, December 02, 2010

How to support facebook single sign-on in your iphone app

PREPARATION
1. download latest facebook sdk for iOS
2. register your application with facebook: http://www.facebook.com/developers/createapp.php
3. set name and picture for your application (for user to have an idea about the application they are going to authenticate)

HOW TO INTEGRATE FACEBOOK SDK WITH YOUR PROJECT

1. add source code under folder FBConnect to your project
2. include the FBConnect headers in your code
#import "[RELATIVE_PATH]/FBConnect.h"
3. init Facebook object
Facebook* facebook = [[Facebook alloc] init];

WHAT IS SINGLE SIGN-ON?
The new authentication mechanism that users no longer have to re-enter their credentials to authenticate each app if valid session already exists Facebook official app or Safari.

HOW SINGLE SIGN-ON WORKS?
It relies on iOS's fast app switching. Your app trigger FBApp/Safari for authentication. After the user grants or declines the authorization, the FBApp/Safari redirects back to your app, passing the authorization token, expiration, and any other parameters the Facebook OAuth server may return.

SINGLE SIGN-ON FLOW


SUPPORT SINGLE SIGN-ON
1. bind your app to a URL scheme corresponding to your Facebook application ID by modifying .plist file of your app

2. catch FBApp/Safari redirection by implementing this in your app's main AppDelegate
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url{
[facebook handleOpenURL:url];
}


START AUTHENTICATION
1. call authorize method
[facebook authorize:{YOUR_APP_ID} permissions:{PERMISSIONS} delegate:self];


HOW TO DISABLE SINGLE SIGN-ON?
1. in Facebook.m authorize method
[self authorizeWithFBAppAuth:NO safariAuth:NO];


ref: https://github.com/facebook/facebook-ios-sdk/

Wednesday, June 23, 2010

如何將你的網頁/站整合入Social Graph中

說在前面:
1.文件都是英文的, 要改成中文用自己的話講好困難啊XD
2.Facebook已經將"become fans"換成like, 但為了說明方便我還是使用了粉絲這個詞.

[什麼是Open Graph Protocol]
Open Graph Protocol是用來幫助你將網站變成Social Graph成員的工具,
它提供了一個規範讓網站能更具體更精確的描述自己在現實生活中所代表的東西.

[為什麼要將你的網站變成Graph Object]
每個在Social Graph的成員都是一個Object,
一旦你的網站變成了Object其他的成員就可以輕易的跟你建立關係.
像是使用者可以like你的網站,
你也可以了解like你的使用者們有什麼特性等等.

[如何將你的網站變成Graph Object]
為了將你的網頁變成Graph Object, 你需要利用Open Graph protocol的"meta"標籤.
Open Graph protocol了以下幾種property來幫助你描述網站的特性.

=必要欄位=
1. og:title - object的標題

2. og:type - object的類型 (完整類型請參考:這裡)

*其中website/blog這兩個類型是用於整個網站, 所以他們應該只會出現在網站的domain, 如果是單篇文章的話要使用article這個類型
*標題跟類型一旦設定之後就不能隨意更動, 在修改之後原有的like名單會被移除, 為了避免讓粉絲感到奇怪, 集滿10個like之後就不能改了, 另外,在修改後需要10-15分鐘才會生效

3. og:image - 用來代表這個object的圖片, 至少需要50px*50px, 長寬比不能超過1:3

4. og:url - 網址, 會被用來當做這個object的ID

5. og:site_name - 易讀性高的網站名稱

6. fb:admins/fb:app_id - 網站管理者的Facebook ID

*為了在Facebook管理你的網站, 你必須要將網站和你的Facebook產生關聯, 之後你就可以向粉絲發布訊息或是在Facebook上查看網站的相關統計資訊, 網站可以有多個管理人, 每個管理人的帳號需用逗號分隔, 此外, 排在最前面的管理人不能被移除, 也不能其更改順序.

=建議欄位=

1. og:description - object的描述

下圖是測試網站的html:
需註明og跟fb這兩個namespace,

在編輯完html後,
可以利用Facebook提供的工具來看看資料有沒有寫對!

完成以上步驟之後你的網站就可以變成Graph Object囉!

[如何在網站上放置like按鈕]
這同樣可以利用Facebook提供的工具!
在URL輸入你的網址接著調整下面的參數做出你喜歡的樣子,
確定之後按GetCode複製程式碼.

再將程式碼放到網站上就可以囉!
(上面那張圖是後來捕抓的, 所以粉絲狀態已經不一樣囉!)

另外網頁也是可以放置like按鈕低!
接下來使用者只要按like就能變成網站的粉絲啦!

[如何在Facebook上管理網站]
在登入之後到帳號的地方選管理頁面就會進入網站在Faceook上的牆,
按左邊的編輯頁面就可以囉!

所有的資訊都找的到也能更改設定.


[參考資料]
Open Graph Protocol
facebook open graph/api

[相關討論]
Does Facebook Really Want a Semantic Web?
Facebook Open Graph: The Definitive Guide For Publishers, Users and Competitors
當社交與搜尋合而為一!社交網站的搜尋野心(一)Facebook

大概就是這樣啦~
報告完畢