2015-07-12 63 views
2

我正在開發一個應用程序,它使用Facebook Graph API來實現FB auth集成。作爲其中的一部分,我們從Facebook獲取用戶的電子郵件,first_name和last_name,以便我們可以將電子郵件地址與我們數據庫中的現有用戶相匹配,或者創建一個新用戶來解決這個問題。Facebook Graph API v2.4不返回擴展用戶數據

在2.3圖形版本中,我們可以很容易地獲得與下面的請求,你可以在Graph API Explorer試運行這一信息,假設我們提供了一個訪問令牌具有權限user_about_meemail

Request: https://graph.facebook.com/v2.4/10154900171335022 
Response: 
{ 
    "id": "123456", 
    "email": "[email protected]", 
    "first_name": "Buckeroo", 
    "gender": "male", 
    "last_name": "Banzai", 
    "link": "https://www.facebook.com/app_scoped_user_id/123456/", 
    "locale": "en_US", 
    "name": "Buckeroo Banzai", 
    "timezone": -4, 
    "updated_time": "2015-06-06T07:21:23+0000", 
    "verified": true 
} 

但是當我切換到API V2.4,並嘗試了同樣的要求,甚至當我使所有權限,我得到以下無用的應答:

{ 
    "name": "Topher Hunt", 
    "id": "10154900171335022" 
} 

這與FB的API文檔不符,這表明完整的數據(包括電子郵件)仍然應該返回,因爲它在v2.3中。

在使用FB Graph v2.4時,是否有人成功找到了獲取用戶電子郵件地址的方法?任何解決方法?也許我應該暫緩升級?

在此先感謝!

回答

9

您應該將'fields'參數與相關的權限關鍵字一起傳遞。請注意,自Graph API 2.2及更高版本發佈以來,用戶可以拒絕特定數據字段的權限。

除此之外,如果用戶註冊了電話號碼,那麼電子郵件字段將返回爲NULL。

要通過HTTP訪問用戶的電子郵件和我,這裏有一個例子:

https://graph.facebook.com/v2.4/10154900171335022?fields=email,about

在Javascript中的一個例子。

 FB.login(function(response) { 
       if(response.authResponse) { //If the user grants permission 
         FB.api('/me?fields=email,about', function(response) { 
          console.log(response.email); 
          console.log(reponse.about); 
         }); 
       } else { 
           // User cancelled login or did not fully authorize. 
       } 
    }, { 
     scope: 'email,user_about_me' 
    ); 
+0

我與我的{app-id} /分數 應該提供什麼字段完全相同的問題? 謝謝! –