網頁

顯示具有 facebook 標籤的文章。 顯示所有文章
顯示具有 facebook 標籤的文章。 顯示所有文章

2012年12月21日 星期五

【facebook SDK 3.1】教程2-登入,認證,登出

【環境:xCode4.5 , ios6 , USE ARC】
facebook app what is NEW:【facebook SDK 3.1】what is NEW?

facebook app的基本設定,請參考:【facebook SDK 3.1】教程1-設定

說明:
這篇文章,主要在說明,登入-->驗證-->登出 等步驟說明。
若有需要基本設定等,請參考上面文章。

目前facebook login共有三種,現在說明的是目前2012釋放的版本教學。

在新本的SDK 3.1中,若用戶嘗試登入facebook,facebook SDK將會針對目前用戶的設定,選擇最佳的登入方式。
若用戶已經給與ios app權限,SDK將會立即取得token。

現在讓我們開始享受coding的流程吧...

step 1 : include the Facebook SDK
首先建立一個uiviewcontroller,命名為login,將此view設定為windows的rootviewcontroller。
分別在login.m和delegate.m下加入
#import <FacebookSDK/FacebookSDK.h>

step 2 : impelment the login flow

1.在login.m中建立一個uibutton名稱自定,若要跟下面所講的內容一樣的話,那就authButton

2.開啓你的delegate.h檔,建立一個全域變數
extern NSString *const FBSessionStateChangedNotification; 


3.開啓你的delegate.m檔,並定義一個notification string
NSString *const FBSessionStateChangedNotification =
    @"com.example.Login:FBSessionStateChangedNotification";


你要注意的是『com.example.Login』這是你iOS app的bundle id…..

4.接下來,將下列兩個方法放到你的delegate.m中
/*
 * Callback for session changes.
 */
- (void)sessionStateChanged:(FBSession *)session
                      state:(FBSessionState) state
                      error:(NSError *)error
{
    switch (state) {
        case FBSessionStateOpen:
            if (!error) {
                // We have a valid session
                NSLog(@"User session found");
            }
            break;
        case FBSessionStateClosed:
        case FBSessionStateClosedLoginFailed:
            [FBSession.activeSession closeAndClearTokenInformation];
            break;
        default:
            break;
    }
    
    [[NSNotificationCenter defaultCenter]
     postNotificationName:FBSessionStateChangedNotification
     object:session];
    
    if (error) {
        UIAlertView *alertView = [[UIAlertView alloc]
                                  initWithTitle:@"Error"
                                  message:error.localizedDescription
                                  delegate:nil
                                  cancelButtonTitle:@"OK"
                                  otherButtonTitles:nil];
        [alertView show];
    }
}

/*
 * Opens a Facebook session and optionally shows the login UX.
 */
- (BOOL)openSessionWithAllowLoginUI:(BOOL)allowLoginUI {
    return [FBSession openActiveSessionWithReadPermissions:nil
                                          allowLoginUI:allowLoginUI
                                     completionHandler:^(FBSession *session,
                                                         FBSessionState state,
                                                         NSError *error) {
                                         [self sessionStateChanged:session
                                                             state:state
                                                             error:error];
                                     }];
}

5.在你的.h檔中加入
- (BOOL)openSessionWithAllowLoginUI:(BOOL)allowLoginUI;

6.若你需要額外的權限,修改openSessionWithAllowLoginUI:方法

ex:要求email 和 user_likes 的用戶權限
- (BOOL)openSessionWithAllowLoginUI:(BOOL)allowLoginUI {
    NSArray *permissions = [[NSArray alloc] initWithObjects:
        @"email", 
        @"user_likes",
        nil];
    return [FBSession openActiveSessionWithReadPermissions:permissions
                                              allowLoginUI:allowLoginUI
                                         completionHandler:^(FBSession *session,
                                                         FBSessionState state,
                                                         NSError *error) {
                                         [self sessionStateChanged:session
                                                             state:state
                                                             error:error];
                                     }];
}

7.若你需要寫入的權限,如:public_actions,你必須使用
reauthorizeWithPermissions:defaultAudience:completionHandler: 

permissions guide會有更多相關訊息

8.login flow最大的不同點在於 iOS 6+ 與 早期的iOS版本 兩者。
在iOS 6中,登入時,你的app將傳遞控制權給Facebook iOS app or 手機瀏覽器中的Facebook。
當使用者認證後,控制權將返回給你的app,同時夾帶session的資訊在編碼過的URL中。
為了記錄這些資訊,你需要給在返回的url中做一些處理,在ios6+中,login flow從ios中取得用戶的證書,用戶不需傳送資訊到facebook app。

9.在delegate.m中,分別找到對應的位置,把下面的code塞進去
- (BOOL)application:(UIApplication *)application
            openURL:(NSURL *)url
  sourceApplication:(NSString *)sourceApplication
         annotation:(id)annotation {
    // attempt to extract a token from the url
    return [FBSession.activeSession handleOpenURL:url];
}

- (void)applicationDidBecomeActive:(UIApplication *)application
{
    [FBSession.activeSession handleDidBecomeActive];
}

- (void)applicationWillTerminate:(UIApplication *)application
{
    [FBSession.activeSession close];
}

10.在你的login.m中
#import "AppDelegate.h"

並將剛剛設定好的button的action,寫成
- (void)authButtonAction
{
    AppDelegate *appDelegate =
    [[UIApplication sharedApplication] delegate];
    
    // If the user is authenticated, log out when the button is clicked.
    // If the user is not authenticated, log in when the button is clicked.
    if (FBSession.activeSession.isOpen) {
        [appDelegate closeSession];
    } else {
        // The user has initiated a login, so call the openSession method
        // and show the login UX if necessary.
        [appDelegate openSessionWithAllowLoginUI:YES];
    }
} 

此時你run project的話會看到兩種畫面,
『根據你的設定會有所不同:有無使用ios 6 內建的facebook帳號登入』
並在log中看到
2012-12-21 18:56:16.832 facebooktest[2725:19a03] User session found

到了這一步...你已經完成了登入+驗證的程序

step 3 : impelment the logout flow

1.在delegate.m中
- (void) closeSession {
    [FBSession.activeSession closeAndClearTokenInformation];
} 

2.在delegate.h中
- (void) closeSession; 

3.改寫你的- (void)authButtonAction
- (void)authButtonAction
{
    AppDelegate *appDelegate =
    [[UIApplication sharedApplication] delegate];
    
    // If the user is authenticated, log out when the button is clicked.
    // If the user is not authenticated, log in when the button is clicked.
    if (FBSession.activeSession.isOpen) {
        [appDelegate closeSession];
    } else {
        // The user has initiated a login, so call the openSession method
        // and show the login UX if necessary.
        [appDelegate openSessionWithAllowLoginUI:YES];
    }
} 

4.在login.m中的viewdidload中
[[NSNotificationCenter defaultCenter]
     addObserver:self
     selector:@selector(sessionStateChanged:)
     name:FBSessionStateChangedNotification
     object:nil];

5.在login.m中的- (void)didReceiveMemoryWarning
 
[[NSNotificationCenter defaultCenter] removeObserver:self];

6.在login.n中添加此方法
 
- (void)sessionStateChanged:(NSNotification*)notification {
    if (FBSession.activeSession.isOpen) {
        [self.authButton setTitle:@"Logout" forState:UIControlStateNormal];
    } else {
        [self.authButton setTitle:@"Login" forState:UIControlStateNormal];
    }
}

7.在login.m中的viewdidload中的最後面加上
 
AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
[appDelegate openSessionWithAllowLoginUI:NO];


==
到這邊就完成了自建的登入、驗證、註冊...等動作
當然facebook sdk中也有提供login ui的api
不過就不像這種彈性方式了~

最後若有error,請檢查facebook app的設定是否正確.
ex:bundle id沒有設定好,請參考前面的設定文章


As always , if you have any question , feel free to contact me.
有任何問題,請聯絡我

歡迎轉載,請註明出處,感謝。

2012年12月20日 星期四

【facebook SDK 3.1】教程1-設定

【環境:xCode4.5 , ios6 , USE ARC】
說明:

facebook SDK 3.1 官方範例下載,下載完畢後須安裝。

官方的source code在此:Note that when building the SDK from source, you must first run scripts/build_framework.sh before compiling and running the samples.

這邊有介紹裡面用的sample code目的為何。

上面零零落落的稍微講一下,若你想知道sdk 3.1的特性有哪些,請參考:【facebook SDK 3.1】what is NEW?


若你想參考如何登入、驗證、登出:【facebook SDK 3.1】教程2-登入,認證,登出


Step 1:Create a facebook app(官方步驟4)

首先,你需要一個建立一個 facebook app ,透過這個app,從用戶那邊取得權限,建立的方式比較特別的應該是『Bundle ID』為必填。
下面就是一個簡單的教學步驟:


1.首先請到這邊,建造你的facebook app,並建立基本資訊

建立好你的facebook app 後,會產生專屬的app ID 顯示在最上方


2.現在你需要將你app中的bundle identifier,使你的facebook app可支援從你的ios app中登入
(這在facebook 3.1中必須的動作)

點選 “Native iOS App”  
Bundle ID:  (必填-請填入你ios app中的設定)
iPhone App Store ID: (選填)
iPad App Store ID: (選填)
Facebook Login: 選擇Enable
Deep Linking: 選擇Enable
URL Scheme Suffix: (選填)



bundle id我想寫過app的人應該知道到哪裡可以找得到。


Step 2:Configure a new xcode project
這個步驟主要是講,你的app該怎樣設定,才可以正確使用facebook framework。

一、有四個framework你必須放到你的專案中:

1.**FacebookSDK.framework  : 在你下載的檔案當中,直接拖進專案。
(以下三個均為xcode已有的framework,加入方法我想大家應該都知道)
2.**Social.framework
3.**Accounts.framework
4.**AdSupport.framework

其中AdSupport.framework,僅有在你必須用到facebook的廣告時,才須設定,要付費,如果你想用facebook行銷,或許這是一個不錯的方法。


二、除了上述四個 framework 外,你還需要放入兩個bundle:
FacebookSDKResources.bundle
FBUserSettingsViewResources.bundle


位置在你剛加入的 Facebook.framework 中的 resources 裡。


三、

若你想要3.1版本同時支援較舊版本的ios....非ios6,且ios 4.3+
請將framework的flag
**Social.framework
**Accounts.framework
**AdSupport.framework

從"Required"選擇成"Optional"



四、在other link中,加入''-lsqlite3.0''


五、info.plist中加入
key:FacebookAppID 
type:string
value:(你申請的Facebook app id)  

六、建立url type
格式為   fb + (你申請的Facebook app id)



後記:
走到這一步,恭喜你已經完成基本設定。
雖然看起來很複雜,但是其實每一個步驟都有他的意義,其時設定久了,也就習慣了。



As always , if you have any question , feel free to contact me.
有任何問題,請聯絡我

歡迎轉載,請註明出處,感謝。

【facebook SDK 3.1】what is NEW?

【環境:xCode4.5 , ios5.1 & ios6 , USE ARC】

facebook app的基本設定,請參考:【facebook SDK 3.1】教程1-設定
若你想參考如何登入、驗證、登出:【facebook SDK 3.1】教程2-登入,認證,登出

說明:

首先來分享SDK 3.1有什麼新功能,畢竟工欲善其事、必先利其器,重點還要瞭解他的特性,才能把事情做好。

更快、更簡單的方式,去整合SDK 3.1還有你的iOS app,當然iOS 6是整合的重點,包含:
1.本機facebook login:利用iOS 6去登入facebook的功能,原理應該是,因為你已經利用iOS 6裡面的facebook登入過,所以取得session的方式,也是跟iOS 6拿到,不用再透過scheme的方式,跳到facebook的登入頁,再跳轉回你自己的app,相對的速度上優化許多。

2.分享機制也一樣,透過Native sheet提高分享文章的效能。


因整合ios,故可利用Native 提供的UI元件,讓你更快、更簡單的套用相關功能,如:
Friend Picker、Places Picker、Profile Picture、Login controls 
讓用戶的體驗更加的完善。

ps:不過還是自己打造的元件比較順眼點。

其他特徵包括:
1.與iOS的無縫結合:讓你的app與ios 4.3+版本,更無縫地結合,在iOS6上,更簡單的整合login與分享機制。
2.更簡單的session管理:利用引入的FBSession API,管理、儲存、更新使用者的token。
3.改善API效能:你只需要編寫少量的code去使用Facebook Graph, FQL, and other APIs...等,運用多線程的效能,使用上將更快更完善,讓用戶體驗更好。
4.你可以經由SDK 3.1安裝廣告,去了解有多少用戶使用你的ads,安裝ads可以衡量點擊次數和app的安裝次數。
ps:透過facebook app,也可以看到一些基本資料,如:註冊使用人數...等等。


ps:在這一版的SDK中,也遇過不少問題...因為同時要滿足6和6以下的用戶,又要滿足有些人非用ios6的native facebook,考量的點有很多。


As always , if you have any question , feel free to contact me.
有任何問題,請聯絡我

歡迎轉載,請註明出處,感謝。

2012年7月5日 星期四

IOS 使用 facebook SDK 教程(二)『Adding Social Context』


相關文章更新:2012/12/21

【facebook SDK 3.1】what is NEW?

【facebook SDK 3.1】教程1-設定

【facebook SDK 3.1】教程2-登入,認證,登出



==請改用sdk 3.1==


【環境:xCode4.3.2 , ios5.1 , USE ARC】
說明:
說明:此教程主要為facebook 2012 08後,官方提供的主要流程。
此教程為文件中的『Adding Social Context』,理解後的教學執行方式。
在這篇文章中,可以學到如何取得用戶社交圈的各類資訊,和如何使用『分享』、『邀請』等facebook常見功能。
建議將IOS 使用 facebook 教程『Getting Started』理解後,再來觀看文章。
官方網站教程:http://developers.facebook.com/docs/mobile/ios/build/#graph

Step 6: Using the Graph API


Facebook Graph API 提供一種簡單的、一致性的Facebook social graph使用方法,此種方法可以取得用戶的社交圈的各類資訊(e.g., people, photos, events, and fan pages) and the connections between them (e.g., friend relationships, shared content, and photo tags)

你可以透過此種方法(Graph API )去請求相關你想要的訊息,例如:用戶資訊
 
// get information about the currently logged in user
[facebook requestWithGraphPath:@"me" andDelegate:self];

// get the posts made by the "platform" page
[facebook requestWithGraphPath:@"platform/posts" andDelegate:self];

// get the logged-in user's friends
[facebook requestWithGraphPath:@"me/friends" andDelegate:self];

請將你的程式碼加入FBRequestDelegate的協議(protocol),這樣才可以去處理你所請求的回應(your request responses)。
注意:server適用json去傳遞回應你的請求,facebook SDK中已經有這個JSON library。
所以若你的程式碼中,必須包含request:didFailWithError:避免解析錯誤的狀況發生。

『回應請求』若成功,程式就會呼叫request:didLoad:,『回應』傳遞的delegate可能為NSArray、NSDictionary。

ps:基本上你加入一個按鈕,然後請求其中一個回應,並加入FBRequestDelegate的協議,並加入下列code:
 
- (void)request:(FBRequest *)request didReceiveResponse:(NSURLResponse *)response {
    NSLog(@"received response");
}
就可以看到你的回應已經成功。



你的app也可以根據自己的需求,去解析自己善用的方式。


Step 7: Integrating with Social Channels


Social Channels能使用戶去po文到他們朋友的牆上或者寄送邀請給他人,facebook SDK提供方法經由Facebook Platform dialogs去整合social channels ,目前支援的dialogs有以下:
  • Feed Dialog - the dialog used for publishing posts to a user's News Feed.(分享)
  • Requests Dialog - the dialog used to send a request to one or more friends.(寄送邀請)
這允許你的app去提供基本的facebook功能,不需要去建立native dialogs, make API calls, or handle responses.詳細請參閱mobile distribution guide
要使用此功能,請在你的class中加入『FBDialogDelegate』的協議(protocol),這樣才可以使用dialog的功能。

Requests

Requests』是最好的方法使用戶邀請他們的朋友去使用你的app,你的app可以使用『Request dialog』讓用戶邀請朋友去使用你的app。
若用戶的裝置支援此功能,每當朋友發送請求,除了他們一般在Facebook中的通知,他們將獲得Facebook的本機應用程序推送通知。
 
    NSMutableDictionary* params = [NSMutableDictionary dictionaryWithObjectsAndKeys:
                               @"Come check out my app.",  @"message",
                               nil];

    [facebook dialog:@"apprequests"
                  andParams:params
                andDelegate:self]; 

News Feed

這就是大家所熟悉的『分享』功能。
使用方法如下:
 
[facebook dialog:@"feed" andDelegate:self];

Timeline and Open Graph

這個部分有興趣就到官網看吧,這邊不多做介紹。





As always , if you have any question , feel free to contact me.
有任何問題,請聯絡我

歡迎轉載,請註明出處,感謝。

2012年7月4日 星期三

IOS 使用 facebook SDK 教程(一)『Getting Started』

相關文章更新:2012/12/21

【facebook SDK 3.1】what is NEW?

【facebook SDK 3.1】教程1-設定

【facebook SDK 3.1】教程2-登入,認證,登出



==請改用sdk 3.1==

【環境:xCode4.3.2 , ios5.1 , USE ARC】
說明:此教程主要為facebook 2012 08後,官方提供的主要流程。
此教程為文件中的『Getting Started』,理解後的教學執行方式。
在這篇文章中,你可以學到一開始的設定,包含如何在你的app中使用SSO,一鍵授權,一建取銷售權的方法。
官方網站教程:http://developers.facebook.com/docs/mobile/ios/build/#graph

Getting Started

Step 1: Registering your iOS App with Facebook


先到facebook開發者中心,建立你的application,這個application負責溝通facebook去使用facebook允許你的一些動作。
ps:至於如何去申請的facebook的應用程序上,開啓SSO的設定,就請去官方文件參考:Setting up for Facebook iOS App Distribution and Deep Linking

如圖:

Step 2: Installing the iOS SDK


下載XcodeGitClone the GitHub repository
其中GitHub repository裡面的download裡的資料,包含此次要用的facebook ios SDK和他的範例。
當你下載完畢後,首先下面的步驟就是教你如何啓用 Single Sign-On (SSO),這是一個關鍵的執行功能,在這個步驟之後,將會帶你走一次IOS app的設定。

Step 3: Implementing Single Sign-On (SSO)


Single Sign-On (SSO)是一個特別的功能,讓使用者利用 Facebook identity登入你的ios app。
使用者將不需要輸入帳號、密碼等資訊去使用facebook ios app。
此外可以透過facebook app取得使用者的授權資訊,含社交功能和帳戶資訊。

SSO主要的功能就是在他們自己的裝置中,將使用者重新導向到facebook app,因為使用者已經登入facebook,他們將不需要再一次的填寫自己的帳號、密碼。
使用者將看到app提供的『權限驗證對話框』,且會將access_token重新導向到ios app中。

開發者必須瞭解到facebook的SSO機制,會根據用戶的設備安裝,其表現略有不同。
下列在某些IOS的配置上會發生的情況:

  • 若用戶本身有裝facebook開發並發佈的app應用程式,則你的app中的facebook SDK會打開facebook app的驗證對話框。用戶授權或者拒絕後,facebook app會返回到你的app,並傳遞access token, expiration, and any other parameters the Facebook OAuth server may return.
  • 如果沒有安裝3.2.3版本的Facebook app,SDK將打開在Safari手機瀏覽器驗證對話框。用戶授予或撤銷授權後,Safari瀏覽器返回你的app。類似的Facebook app的授權,允許多個應用程序共享相同的Facebook用戶access_token通過Safari瀏覽器的cookie。
  • 若app的程式運行的ios版本,不支持多任務.....(應該是指舊的ios,所以這點不須考慮)

facebook將盡可能會要求使用者去更新到最新的facebook app,所以開發者也追隨facebook的腳步吧....
ps:這點還蠻白爛的....因為像我用shareKit這個套件的話,就被迫強迫更新為最新的版本,不然就不能用摟~~~

將SSO加入到你的app中是非常簡單的一件事情,將在下方跟你介紹。

下面會先教你一開始的程式設定->將你的facebook app access token放入專案中->執行

ps:至於facebook app在官網的開啓sso設定,相當簡單,請到Setting up for Facebook iOS App Distribution and Deep Linking觀看教學

Create your iOS Project

首先建立一個View-based Application project template專案。
並將你下載的IOS Facebook SDK 檔案加入到你的專案中,有幾種方法加入,但最簡單的就是將src這個資料夾的檔案全部拖曳到你的專案中。其中.pch and .xcodeproj files.的兩個檔案可以排除掉,如圖:

Creating an iOS Facebook SDK Static Library
若你在建立你的專案的時候選擇啟用ARC,你必須去使用static library version of the iOS Facebook SDK替代直接拖曳src的方式。
你必須先打開你的command line,並於該資料夾的scripts下執行
 
sh build_facebook_ios_sdk_static_lib.sh

編譯後,就會跑出一段訊息,告訴你創建的static library version of the iOS Facebook SDK存放的位置,將整個檔案加入到你的專案中即可。 

Modify the application delegate header file

Step 1 在你的專案中加入此標頭檔。
#import "FBConnect.h" 
Step 2 在你的class中加入protocol。
@interface MyGreatIOSAppAppDelegate : NSObject <UIApplicationDelegate,FBSessionDelegate>
Step 3.   Set up the application delegate header file by creating instance variable:
Facebook *facebook; 
Step 4.   Add a property for an instance of the Facebook class:
@property (nonatomic, retain) Facebook *facebook; 


Modify the application delegate implementation file


Step 1 Synthesize the facebook property (this creates getter and setter methods):
@synthesize facebook; 

Step 2 Within the body of the application:didFinishLaunchingWithOptions: method create instance of the Facebook class using your app ID (available from the App Dashboard):
facebook = [[Facebook alloc] initWithAppId:@"YOUR_APP_ID" andDelegate:self];
This instance is used to invoke SSO, as well as the Graph API and Platform Dialogs from within the app.

Step 3.   Once the instance is created, check for previously saved access token information (We will show you how to save this information in Step 6). Use the saved information to set up a "session valid" check by assigning the saved information to the facebook access token and expiration date properties. This ensures that your app does not redirect to the Facebook app and invoke the Auth Dialog if the app already has a valid access_token. If you have asked for offline_access extended permission, then your access token will not expire, but can still get invalidated if the user changes their password or uninstalls your app. Read more on How-To: Handle expired access tokens.
Note: offline_access is deprecated! See the Extending the access token section for information on how to extend the expiration time of an access token for active users of your app.
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
if ([defaults objectForKey:@"FBAccessTokenKey"] 
        && [defaults objectForKey:@"FBExpirationDateKey"]) {
        facebook.accessToken = [defaults objectForKey:@"FBAccessTokenKey"];
        facebook.expirationDate = [defaults objectForKey:@"FBExpirationDateKey"];
} 

Step 4.   Check for a valid session and if it is not valid call the authorize method which will both log the user in and prompt the user to authorize the app:
if (![facebook isSessionValid]) {
    [facebook authorize:nil];
}

Step 5.   Add the application:handleOpenURL: and application:openURL: methods with a call to thefacebook instance:
// Pre iOS 4.2 support
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {
    return [facebook handleOpenURL:url]; 
}

// For iOS 4.2+ support
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url
    sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
    return [facebook handleOpenURL:url]; 
} 
The relevant method is called by iOS when the Facebook App redirects to the app during the SSO process. The call to Facebook::handleOpenURL: provides the app with the user's credentials.

Step 6.   Implement the fbDidLogin method from the FBSessionDelegate implementation. In this method you will save the user's credentials specifically the access token and corresponding expiration date. For simplicity you will save this in the user's preferences - NSUserDefaults: 
 
- (void)fbDidLogin {
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    [defaults setObject:[facebook accessToken] forKey:@"FBAccessTokenKey"];
    [defaults setObject:[facebook expirationDate] forKey:@"FBExpirationDateKey"];
    [defaults synchronize];

} 

最後的長相可能就是下方

Modify the app property list file


最後需要完成的一件事情就是到你的project中的.plist設定相關參數,使你的專案啟用SSO。
找到你建立專案時產生的.plist檔,並在其中按下右鍵新增一行,建立一個URL types,並在URL Schemes中,加入你的 fb[YOUR_APP_ID]  
【注意】必須先是fb的字符串+你去facebook上申請應用程式的APP_ID
如下圖:


到這一步,恭喜你已經完成設定,剩下的就是在你的app加入使用的相關功能。

Test your app


現在只要你輸入好上面的步驟,並填入你所申請的facebook 應用程式 ID,執行你的app後,就會發現認證的對畫框會被打開。
用戶經過確認後,給予你的app權限去訪問他們的facebook信息。
當用戶按下『允許』後,你的app將被授權使用。
若用戶按下『不允許』,則你的app無法被授權。

Step 4: Adding Log Out to your App


當用戶不想在你的app中授權使用他們的帳戶資訊時,就必須使用下列方法去登出
 
[facebook logout];

此將執行 fbDidLogout 的方法,可以藉 FBSessionDelegate 的協議去處理註銷的動作。
注意:執行登出後,你的app將被吊銷登入的權限,將會清除掉app中的access_token。
用戶可經由facebook的隱私設定去修改應用程式權限。
開發者也可以使用Graph API call.去revoke an app's permissions.

接下來就來將logout的按鈕,加到你的app中吧。
    Step 1   加入 logout 按鈕和相關處理程序
    // Add the logout button
    UIButton *logoutButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    logoutButton.frame = CGRectMake(40, 40, 200, 40);
    [logoutButton setTitle:@"Log Out" forState:UIControlStateNormal];
    [logoutButton addTarget:self action:@selector(logoutButtonClicked:)
        forControlEvents:UIControlEventTouchUpInside];
    [self.viewController.view addSubview:logoutButton]; 
    
    ps:若是用fb develop上的程式,稍微有點錯誤,在@selector(logoutButtonClicked:)上,少了:的符號

    接下來加入按下按鈕後的動作
    // Method that gets called when the logout button is pressed
    - (void) logoutButtonClicked:(id)sender {
        [facebook logout];
    }
    

    Step 2 添加註銷回調處理程序
     
    - (void) fbDidLogout {
        // Remove saved authorization information if it exists
        NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
        if ([defaults objectForKey:@"FBAccessTokenKey"]) {
            [defaults removeObjectForKey:@"FBAccessTokenKey"];
            [defaults removeObjectForKey:@"FBExpirationDateKey"];
            [defaults synchronize];
        }
    } 
    

儲存,並且執行你的app,按下按鈕後,已經成功地登出,但除非你的app有提示使用者,否則沒有其他視覺上的提示。但若將app全部關掉後,重新執行你的app,則會被要求再次授權。

Step 5: Requesting Additional Permissions

預設情況下,用戶授權app去存取基本公開資訊(一般為facebook的預設情況),若你的app需要更多資訊,你必須從用戶上取得特別的權限。
實現這種方法,是利用NSArray傳遞權限的授權方法。
下方的例子是要求使用者授權的頁面,授權取得user_likes(你說讚的內容)權限read_stream(存取你在動態消息的貼文)權限:
NSArray *permissions = [[NSArray alloc] initWithObjects:
        @"user_likes", 
        @"read_stream",
        nil];
[facebook authorize:permissions];
[permissions release];

在首次登入授權的情況下,將顯示用戶和朋友的權限關係,在範例中(左下圖),這是user_likes(你說讚的內容)權限。
此外延伸的權限將被要求在第二個授權頁面,在範例中(右下圖),這是read_stream(存取你在動態消息的貼文)權限。
你可以參考permissions guide去獲得更多的使用方式。
所有的權限設定請參考permissions guide
在這邊建議,因為你如果設定越多的權限,將會影響用戶的使用心情,會予以授權的用戶將較少。故建議你只跟用戶要求你app中所必須需要的權限即可。

現在讓我們測試一下程式吧,為了讓你剛剛的project更加方便地使用,請將下列的code,加入到你的專案中:
if (![facebook isSessionValid]) {
    NSArray *permissions = [[NSArray alloc] initWithObjects:
            @"user_likes", 
            @"read_stream",
            nil];
        [facebook authorize:permissions];
        [permissions release];
}

使用上述code時,注意,你可以特別用一個按鈕去增加這個額外權限,或者放在一開始登入就立即確認,均可,若你直接使用貼在你的code中,並和之前的if (![facebook isSessionValid])重復到,可能會產生額外的錯誤效果

儲存,並且執行,你就可以看到你的app已經取得用戶的額外權限。




As always , if you have any question , feel free to contact me.
有任何問題,請聯絡我

歡迎轉載,請註明出處,感謝。