2016-08-21 164 views
0

所以我擺弄着Facebook的iOS SDK,並設法允許用戶登錄到我的應用程序。我有一個UIView安裝在故事板上FBSDKLoginButton類,根據this,它只是一個UIButton的子類。然後我創建了一個@IBOutlet weak var facebookLogInBtn: FBSDKLoginButton!。然後我出去設置我的權限,例如Facebook權限iOS

override func viewDidLoad() 
{ 
    super.viewDidLoad() 

    facebookLogInBtn.delegate = self 
    facebookLogInBtn.readPermissions = ["public_profile", "email", "user_friends"] 
} 

這只是正常,並完成我所需的任務,任何額外的權限我需要,我只是把它們添加到facebookLoginBtn.readPermissions陣列。但經過一些Google搜索後,我發現了一堆使用FBSDKGraphRequest以及FBSDKLoginManager的網站。拿這個例子來說,這個blog。現在我的問題是:

  1. 我的方式被認爲是可以接受的或哈克?它的工作原理,但我只是想確定我遵循標準程序。
  2. 我的方式如何通過Graph API綁定獲取數據?因爲我明確沒有聲明任何FBSDKRequestFBSDKLoginManager對象。我只是添加了我的按鈕,然後實施了它的delegates和Voila!我正在訪問。不需要解析任何JSON數據或任何東西。
  3. 我也注意到,這些網站中的大多數從來沒有實際製作任何UIViewFBSDKLoginButton。這可能是他們必須「手動」處理所有事情的原因嗎?

任何援助將不勝感激。 乾杯!

+0

轉到您的FB帳戶,並移除帳戶的權限在此應用程序。然後重新登錄到應用程序。它工作嗎? –

回答

0

我在做的方式是正確的,但我無法使用它檢索任何用戶數據。使用FBSDKLoginManager對象,Facebook爲我處理了所有事情,它只會返回用戶的最終響應(同意或不同意),但沒有通過我的readPermissions陣列請求的任何實際數據。對於任何數據檢索;甚至可能寫道,我不得不爲它創建一個FBSDKGraphRequest對象。總之,我最終讓Facebook的處理日誌中,並與FBSDKLoginManager,並在成功退出,我檢索到的用戶數據與FBSDKGraphRequest如下圖所示

func loginButton(loginButton: FBSDKLoginButton!, didCompleteWithResult result: FBSDKLoginManagerLoginResult!, error: NSError!) 
{ 
    if error != nil 
    { 
     print("Facebook Log In Failed") 
     print(error.localizedDescription) 
    } 

    let graphRequest: FBSDKGraphRequest = FBSDKGraphRequest(graphPath: "me", parameters: ["fields" : "\(FacebookPermission.NAME), \(FacebookPermission.FIRST_NAME), \(FacebookPermission.LAST_NAME), \(FacebookPermission.EMAIL)"]) 

    graphRequest.startWithCompletionHandler { (connection: FBSDKGraphRequestConnection!, result:AnyObject!, error: NSError!) in 

     if error == nil 
     { 
      print("Data retrieval was successful") 
     } 
     else 
     { 
      print("Facebook Graph Request Error") 
      print(error) 
     } 
    } 
}