fb_license

技術標籤

@selector (1) 初使化區塊 (1) 物件 (1) 物件導向 (2) 型別 (4) 封裝 (1) 流程控制 (1) 陣列 (3) 推論型別 (2) 實機測試 (1) 蓋索林(gasolin) (1) 模組 (1) 憑證 (1) 轉型 (1) 羅康鴻 (121) 類別 (1) 變數 (5) Accelerometer (1) ActiveRecord (1) Activity (1) AFNetworking (1) alloc (1) Android (3) Animation (1) App (1) App ID (1) APP上傳 (1) ASP.NET (1) AVAudioPlayer (1) block (1) C# (2) class (1) CLLocationManager (1) CLLocationManagerDelegate (1) CMMotionManager (4) Controller (1) delegate (1) DELETE語法 (1) Device Motion資料 (1) Dialog (1) DropDownList (1) dynamic language (2) Facebook SDK (9) FBRequest (5) FBRequestConnection (2) FMDB (1) Gesture Recognizers (6) GROUP BY (2) Gyro (1) HAVING (1) IBAction (1) IBOutlet (1) id (3) inheritance (1) init (1) Insert (1) instance variable (1) Interface Builder (1) iOS (70) iOS idea (7) iOS Introduction (1) Layout (1) Magnetometer (1) Menu (2) Method (2) MKMapView (1) MKPointAnnotation (1) MS SQL (5) Nil (1) NSArray (1) NSDictionary (1) NSError (1) NSFileManager & .plist (1) NSMutableArray (1) NSMutableDictionary (1) NSNotificationCenter (1) NULL (1) object (2) Objective-C (16) Objective-C idea (1) ORDER BY (1) Parameter (1) property (1) protocol (2) Provisioning (1) Proximate Sensor (1) Q and A (2) R類別 (1) Rails (9) RESTful SOA (9) Ruby (8) Scene (1) SEELECT (1) Segue (2) SEL (1) SELECT語法 (1) Shake (1) Simulator (1) SOA (8) SQL (6) SQL Server (5) SQL函數 (1) SQL彙總函數 SQL (1) SQLite (1) Storyboard (1) Style (1) Swift (1) Table (1) target & action (1) Theme (1) Toast (1) TRUNCATE TABLE語法 (1) UIActionSheet (1) UIActionSheetDelegate (1) UIActivityIndicatorView (1) UIAlertView (1) UIBarButtonItem (1) UIButton (1) UICollectionView (1) UICollectionViewDataSource (1) UIControl (9) UIDatePicker (1) UIImage (1) UIImagePickerController (2) UIImagePickerControllerDelegate (2) UIImageView (1) UILabel (1) UILongPressGestureRecognizer (1) UINavigationController (2) UIPanGestureRecognizer (1) UIPinchGestureRecognizer (1) UIProgressView (1) UIResponder (1) UIRotationGestureRecognizer (1) UISegmentedControl (1) UISlider (1) UIStepper (1) UISwipeGestureRecognizer (1) UISwitch (1) UITabBarController (1) UITableView (1) UITableViewDataSource (1) UITapGestureRecognizer (1) UITextField (1) UITextFieldDelegate (1) UITextView (2) UITextViewDelegate (1) UIToolBar (1) UIView (8) UIWebView (1) UPDATE語法 (1) var (2) VB.NET (7) View (4) WHERE子句 (1) XML (1)

2013/09/20

[iOS] 登入Facebook


安裝完iOS版的Facebook SDK了解完Facebook的Session狀態後現在我們要開始登入Facebook了





我是iOS工程師
Facebook SDK啊,聽說你的Session狀態特別的複雜,那我不就很難搞定登入Facebook的功能?!

我是Facebook SDK,其實您只要使用
+openActiveSession...:AllowLoginUI:YES
然後使用者在"授權登入",
控制好存取代碼就可以了。



先前介紹過Facebook的Session狀態,其實Facebook登入的方式很多種,現在我將介紹其中一個開始Session的方式,路徑如下:






第1步:依照"[iOS]在iOS安裝Facebook SDK"建立一個Single View專案
 

第2步:使用.storybaord建立登場景與登入後的場景

  • 2.1 建立LoginController繼承自UIViewController,並設定給.storyboard中預設的ViewController,最後加上1個"登入"按鈕


  • 2.2 建立MainController繼承自UIViewController,於.storyboard拉入1個ViewController,並以MainController作為此ViewController的Controller,其中加入1"恭喜您登入Facebook"的文字標籤與1個"登出"按鈕


  • 2.3 建立"go_main"轉場Segue,於LoginController登入成功後會進入MainController,包含以下步驟:
  • 2.3.1 對LoginController按右鍵,於Triggered Segues中選munual右方的圓點,托拉至MainController中,表示建立LoginController轉場至MainController的轉場Segue

  • 2.3.2 選Modal模態模式進行轉場

  • 2.3.3 最後選此轉場Segue,並其加上識別字Identifier - "go_main"



第3步:為"登入"換鈕加上登入Facebook的程式
  • 3.1 為"登入"按鈕掛載loginTouch方法

  • 3.2 於LoginController.h透過#import引用Facebook SDK 
#import #import @interface LoginController : UIViewController - (IBAction)loginTouch:(id)sender; @end

  • 3.3 於loginTouch方法中透過+openActiveSession allowLoginUI:YES...進行Facebook登入,注意,allowLoginUI:YES,表示一定會開啟Facebook登入的畫面進行登入,若登入成功則透過performSegueWithIdentifier轉場至MainController
- (IBAction)loginTouch:(id)sender { //透過+[openActiveSession allowLoginUI:YES...]進行Facebook登入 [FBSession openActiveSessionWithReadPermissions:nil allowLoginUI:YES completionHandler:^(FBSession *session , FBSessionState status , NSError *error) { //若無error且session的status等於FBSessionStateOpen //成功登入Facebook開啟連結 if(error == nil && status == FBSessionStateOpen) { //則透過轉場識別字"go_main"轉場至MainController [self performSegueWithIdentifier:@"go_main" sender:self]; } }]; }

第4步:於AppDelegate.m中改寫 -application:(UIApplication *)application openURL:(NSURL *)url...,讓Facebook透過Safari登入後,可透過於於.plist設定的URL Schema("fb" + Facebook AppID)回到目前的App中

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation { //透過handleOpenURL,讓Facebook透過Safari登入後, //可透過於於.plist設定的URL Schema("fb" + Facebook AppID)回到目前的App中 return [FBSession.activeSession handleOpenURL:url]; }


第5步:為"登出"換鈕加上登出程式
  • 5.1 為"登出"按鈕掛載logoutTouch方法

  • 5.2 於MainController.h透過#import引用Facebook SDK
#import #import @interface MainController : UIViewController - (IBAction)logoutTouch:(id)sender; @end
  • 5.3 於logoutTouch方法中透過-
    透過closeAndClearTokenInformation關閉session以登出Facebook,在透過-dimessViewController...回到登入場景
- (IBAction)logoutTouch:(id)sender { //透過closeAndClearTokenInformation關閉session以登出Facebook [FBSession.activeSession closeAndClearTokenInformation]; //關閉此登出畫面 [self dismissViewControllerAnimated:YES completion:nil]; }


第6步:執行,按下"登入"按鈕,輸入帳號與密碼,按下"完成"同意授權登入,登入成功後即會進入MainController,最後可按下"登出"按鈕登出Facebook




檔案連結:myiosapp.zip (此Facebook AppID已刪除,僅提供程式參考)



還有什麼要注意的?! 

  • 還記得+openActiveSession allowLoginUI:YES...中的completionHandler參數嗎,其中我們使用block給予登入後的處理動作,注意,這個block會被session保存下來的,當您透過-close或-closeAndClearTokenInformation登出時,此block會再次被呼叫,因此您要確實的處理session的狀態,以避免程式錯誤的執行。
  • 另外,若您使用-close登出,則您的存取代碼accessToken會被快取下來,下次您可透過+openActiveSession allowLoginUI:NO...或-openWithCompletionHandler直接登入,而不需要出現Facebook登入授權的畫面