2012年7月2日 星期一

Facebook iOS Tutorial Step 3

Step 3: Implementing Single Sign-On (SSO)
第三步就是要實現單一登入。

實現單一登入時,注意驗證方式有幾種不同的機制:
  1. 如果App支援多工,而且裝置上安裝了3.2.3 Facebook App
    • SDK會開啓App
  2. 如果App支援多工,但是裝置上沒有安裝了3.2.3 Facebook App
    • SDK會開啓一個Safari瀏覽器驗證對話框
  3. 如果App不支援多工
    • SDK使用彈出一個內嵌UIWebView的驗證對話框
Facebook Developer有建議使用者升級Facebook App,
所以感覺上應該是比較推薦第一種驗證方式吧!

另外如果你的專案是使用ARC的話記得要將SDK轉換
將SDK加入專案之後,再來就是要開始實作啦!
ViewController.h
#import "FBConnect.h"

@interface ViewController : UIViewController <FBSessionDelegate> {
    
    Facebook *facebook;
}
@property (nonatomic ,retain) Facebook *facebook;
@end
ViewController.m
@synthesize facebook;
//將facebook物件在適當的位置建立
facebook = [[Facebook alloc] initWithAppId:@"Your App ID" andDelegate:self];

//由User Default將access token取出
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
if ([defaults objectForKey:@"FBAccessTokenKey"] 
    && [defaults objectForKey:@"FBExpirationDateKey"]) {
    facebook.accessToken = [defaults objectForKey:@"FBAccessTokenKey"];
    facebook.expirationDate = [defaults objectForKey:@"FBExpirationDateKey"];
}

//判斷連線是否有效,如果是無效的,將需要的權限裝載在NSArray中,然後設定facebook授權。
if (![facebook isSessionValid]) {
        NSArray *permissions = [[NSArray alloc] initWithObjects:
                                @"user_likes", 
                                @"read_stream",
                                nil];
        [facebook authorize:permissions];
    }

//再來就是要加入fbDidLogin,用User Default將access token存起來
- (void)fbDidLogin {
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    [defaults setObject:[facebook accessToken] forKey:@"FBAccessTokenKey"];
    [defaults setObject:[facebook expirationDate] forKey:@"FBExpirationDateKey"];
    [defaults synchronize];

}
AppDelegate.m
// Pre iOS 4.2 support,iOS 4.2之前執行
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {
    return [facebook handleOpenURL:url]; 
}

// For iOS 4.2+ support,iOS 4.2之後執行
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url
    sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
    return [facebook handleOpenURL:url]; 
}
再來就是要修改property list file
開啟App的XXX-Info.plist 建立一筆URL types記錄,在記錄中依序添加 item, URL Schemes, 然後輸入數值fb[YOUR_APP_ID]。


這樣就完工啦!可以測測看啦!

沒有留言:

張貼留言