基本上這是使用Facebook iOS SDK的單點登錄(SSO)功能完成的。根據facebook開發者文檔,https://developers.facebook.com/docs/mobile/ios/build/#implementsso, 它指出,如果用戶已經安裝了版本大於3.2.3的Facebook應用程序,並且用戶的iOS設備支持多任務處理,那麼基本上應用程序(這裏的facebook messenger情況下)可以從主Facebook程序請求當前登錄的用戶信息。
「iOS SDK最引人注目的特性之一是單點登錄(SSO).SSO允許用戶使用他們的Facebook身份登錄您的應用程序。如果他們已經登錄到其設備上的Facebook iOS應用程序他們甚至不必輸入用戶名和密碼。此外,因爲他們正以他們的Facebook身份登錄您的應用程序,您可以獲得用戶訪問他們的個人資料信息和社交圖的許可「
」如果應用程序正在支持多任務的iOS版本中運行,如果設備安裝了V3.2.3或更高版本的Facebook應用程序,則SDK將嘗試在Facebook應用程序中打開授權對話框。在用戶授予或拒絕授權,Facebook應用程序將重定向回呼叫傳遞授權令牌,到期以及Facebook OAuth服務器可能返回的任何其他參數。「
雖然這並非完全正確。如果你注意到,facebook messenger不會重定向到Facebook應用程序,因爲文檔表明SSO會這麼做(我也測試過這是Spotify的行爲)。我猜測本的答案實際上是正確的,因爲他們可能在KeyChain上存儲了一些東西。 – dsingleton