2017-03-04 2 views
0

私はグラフのAPIを使用してFacebookのログインから自分の名前とメールを返します。私のコードが間違っているかどうかはわからないFacebookのグラフリクエストは名前を返していますがメールは返信していません。

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

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"]) 
      } 
     } 
    } 
} 

これは私のコンソールに出力するものです:名前が戻って罰金来るが、メールはnilである - これは私が使用するコードですそれはちょうどバグです - 私は私のパラメータとして電子メールと名前の両方を指定しますが、あなたが見ることができるように、名前だけが戻ってきます。誰がなぜこれが起こっているのか知っていますか? FacebookのグラフAPIは、電子メールを提供していないことを

+0

電子メールの許可をユーザーに聞いたことがありますか? – WizKid

答えて

1

あなたのコードが絶対に正しいと、そこにいくつかの可能性:

  1. 登録ユーザーがその電子メールを提出したが、検証されていない
  2. ユーザーがプライベート/限定として電子メール(可視性)を設定しています友人へのアクセス/アカウントの唯一の(非公開)

チェックアカウント設定(メールは同様にそれが公開されているとして検証有効&です)

+0

あなたは知っている、それらの両方は実際にはtrueです..問題のユーザーは私であり、私は私の電子メールが友人だけで公衆ではないと確信しています(誰ですか?)。また、いつでも最近の過去であってもメールを確認することはできません。それが何であれ、私のコードではないことが分かりました。これが私を狂ってしまったからです。 – 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) 
    } 
関連する問題