2017-03-04 41 views
0

我正在使用圖表api從Facebook登錄中返回我的姓名和電子郵件。這是我使用的代碼 - 名回來很好,但電子郵件是零:Facebook Graph請求正在返回姓名,但不是電子郵件

func getUserInfo() { 
    let params = ["fields" : "email, name"] 
    let graphRequest = GraphRequest(graphPath: "me", parameters: params) 
    graphRequest.start { 
     (urlResponse, requestResult) in 

     switch requestResult { 
     case .failed(let error): 
      print("error in graph request:", error) 
      break 
     case .success(let graphResponse): 
      if let responseDictionary = graphResponse.dictionaryValue { 
       print(responseDictionary) 

       if let name = responseDictionary["name"] { 
        self.nameLabel.text = "Logged in as: \n\(name)" 
       } 

       if let email = responseDictionary["email"] { 
        self.emailLabel.text = "Your email is: \n\(email)" 
       } else { 
        self.emailLabel.text = "Your email is: " 
       } 
       print(responseDictionary["name"]) 
       print(responseDictionary["email"]) 
      } 
     } 
    } 
} 

這是打印到我的控制檯:

["id": 1653899307960705, "name": *my name removed for privacy*] 
Optional(*my name removed for privacy*) 
nil 

我不知道如果我的代碼錯誤或這只是一個錯誤 - 我將電子郵件和名稱都指定爲我的參數,但正如您所看到的,只有名稱會返回。任何人都知道這是爲什麼發生?

+0

您是否要求用戶發送電子郵件許可? – WizKid

回答

1

你的代碼是完全正確的,有幾種可能性,Facebook的圖形API沒有提供電子郵件:

  1. 註冊用戶已經提交了電子郵件,但不進行驗證
  2. 用戶設置電子郵件(知名度)的私人/有限訪問朋友只(不公開)的/你的帳戶的

檢查帳戶設置(電子郵件有效&驗證,以及它是公共的)

+0

你知道,這兩個實際上是真的..有問題的用戶是我,我很確定我的電子郵件是朋友而不是公開(是任何人的?)。任何時候都不記得驗證我的電子郵件是否是最近的過去。如果這就是它的原因,很高興知道這不是我的代碼,因爲這讓我瘋狂。 – KingTim

1

我忘了帶電子郵件許可,所以在這裏我分享你的代碼,以獲得許可。

func fbLoginInitiate() 
    { 
     let loginManager = FBSDKLoginManager() 
     loginManager.logInWithReadPermissions(["public_profile", "email","user_friends"], handler: {(result:FBSDKLoginManagerLoginResult!, error:NSError!) -> Void in 
      if (error != nil) { 
       // Process error 
       self.removeFbData() 
      } else if result.isCancelled { 
       // User Cancellation 
       self.removeFbData() 
      } else { 
       //Success     
       if result.grantedPermissions.contains("email") && result.grantedPermissions.contains("public_profile") && result.grantedPermissions.contains("user_friends"){ 
        //Here you need to call your function for graphRequest 
        self.getUserInfo() 
       } else { 
        //Handle error 
       } 
      } 
     }) 
    } 
func removeFbData() 
    { 
     //Remove FB Data 
     let fbManager = FBSDKLoginManager() 
     fbManager.logOut() 
     FBSDKAccessToken.setCurrentAccessToken(nil) 
    } 
相關問題