2012-02-19 129 views
17

我使用的是註冊與Facebook作爲登錄到我的web應用程序的方式之一,並明確表示要「電子郵件」權限..註冊與Facebook有時不提供電子郵件

在登錄時,一些用戶數據($facebook->api('/me'))存儲在用戶數據庫中,但是,有時電子郵件字段不存在 - 這是一個常見問題嗎?

+0

有去看一下:http://stackoverflow.com/questions/9601620/facebook-graph-api-returning-an-empty-email? – Mangiucugna 2013-08-18 16:14:55

回答

26

只是一個猜測...

Facebook的文檔說:

注:本場將不會被退還,如果沒有有效的電子郵件地址是供用戶

來源:https://developers.facebook.com/docs/reference/api/user/

所以,當一個電子郵件地址無效(誰已經很多年沒有使用Facebook和摧毀用戶/改變他們的電子郵件地址,因爲例如),Facebook可能中斷返回本場。

5%的無效地址可能聽起來很大,但如果我檢查我的臉書朋友,我認爲其中超過5%的人從未使用過他們的帳戶,如果他們登錄時使用的地址不會感到驚訝現在無效。

+0

感謝您從文檔中挖掘出來!我真的不認爲Facebook會隨着時間的推移檢查用戶電子郵件是否有效。你可以鏈接文檔以供參考嗎? – 2013-08-22 10:36:56

+0

完成。我不認爲Facebook會進行檢查,但我認爲Facebook因各種原因(通知,公告等)向用戶發送電子郵件。然後Facebook知道電子郵件是否有效! – 2013-08-22 10:42:29

+1

如果用戶的電子郵件有效,Facebook會隨時檢查。我有我自己的Facebook帳戶的這個問題。此時,facebook認爲我的電子郵件無效。它不會在圖形瀏覽器中返回 – Karl 2014-07-03 20:10:08

4

用戶並不總是要以使用Facebook提供一個電子郵件地址。他們也可以通過短信註冊,儘管它不太常見。

總之,FB不會總是有一個電子郵件地址,因此無法將其投放到您的應用程序。

+0

我的所有用戶都在日本,那裏的短信幾乎不存在..我想知道,有沒有其他的方式來註冊Facebook沒有電子郵件地址? – 2012-02-24 05:05:01

2

嘗試:

// Just to make sure email are permitted 
//$facebook->getLoginUrl(array('req_perms' => 'email')) 

// Request email 
FB.api('/me?scope=email', function(response) { /*...*/ }); 

或者:

$email = $facebook->api('user_id?fields=email'); 

問題:

  • 用戶更改其電子郵件地址爲 「只有我」,因此能見度你無法得到它。
  • 用戶註冊了SMS而不是電子郵件,如前面的答案中所述。

替代方案:

如果你絕對需要聯繫的用戶,但你不能得到它的電子郵件地址n您仍然可以得到其Facebook電子郵件(每個人都有這個電子郵件):「[email protected]」 。

如果用戶使用POP服務器,他將直接在Gmail或其他電子郵件,如果不是他將收到您的電子郵件作爲一個私人短信。這種方法唯一的缺點是您的電子郵件必須是「純文本」而不​​是「HTML」。

+0

我不認爲你理解這個問題 - 即使我嘗試獲取它的方法,FB仍不會返回電子郵件(即使在FB api資源管理器中) – 2013-08-17 08:25:30

+0

是的我理解你的問題,請檢查我的更新答案。 – glautrou 2013-08-17 08:40:31

+0

不,你沒有。我給了一個賞金,讓人們挖掘文檔或者一些FB員工能夠告訴我爲什麼以及在什麼情況下我不會收到用戶的電子郵件地址。 – 2013-08-17 08:42:24

1

一件事是Users don't always have to provide an email address in order to use Facebook(could have registered through mobile) - 由科爾姆提及。除了這 -

請檢查用戶是否明確授予您的email擴展權限或者還沒有後來被撤銷。爲了有一個支票從這你可以使用權限API-

/USER/permissions 
0

我有類似的問題&我找到原因了這一點。對於在「常規帳戶」設置選項卡下沒有設置主電子郵件地址的用戶(他們有許多電子郵件地址,但他們沒有指出他們的主電子郵件地址),則會出現此問題。

我試圖在具有Facebook登錄&即使他們無法檢索這些賬戶的電子郵件地址各種知名網站使用這些賬戶。

因此,它不與代碼的問題(假設u必須問權限)。我們只需要處理這種情況&讓用戶知道我們沒有收到他們的電子郵件地址。像Klout一樣。

感謝

0

除了什麼@Jigar耆那上面寫的,用戶實際上可以取消符號流入在電子郵件的權限。如果是這樣,他/她的電子郵件地址將不會被Facebook返回。

如果用戶取消選中電子郵件權限,強制用戶選擇另一種登錄方法以確保用戶的電子郵件地址返回,那麼實現一種使登錄失敗的邏輯取決於您。