據我所看到的,你讓這個遠複雜得多,它的真正意圖。利用Facebook iOS SDK,以及在您的應用中驗證用戶的所有繁重工作都由Facebook SDK處理。無需獨立提供登錄表並管理應用程序本地存儲和Facebook服務器之間的訪問令牌交換,而無需使用整個 Facebook SDK的便利。
此鏈接顯示如何在您的iOS應用程序中本地實施SSO。這很簡單。 http://developers.facebook.com/docs/mobile/ios/build/#implementsso
然後,我明白你要在外部服務器上保存身份驗證信息或中央用戶數據庫信息。 同步的最佳方式 FB客戶端和您自己的服務器之間的信息是在您收到FB服務器之後,簡單地檢查由FB服務器返回的登錄信息。
下面是一個簡單擊穿:
登錄使用Facebook的標準SDK用戶(見上面的鏈接)。
在-didLogin
方法(或任何在Adobe AIR環境中的等價物)中,檢查FB與服務器返回的訪問令牌。不確定您使用的是哪種服務器架構,但可以肯定地說,這將在FB SDK之外進行。另外,將訪問令牌保存在應用程序的用戶默認值中,以便下次用戶不必再次登錄。整個過程應該(並且本質上會)比聽起來更快。
如果與服務器的檢查成功返回,請通知用戶登錄成功。如果不是,則顯示錯誤視圖,解釋用戶被拒絕/未登錄的原因。
爲什麼這樣呢?原因很簡單。假設您通過Facebook登錄您的應用程序的原因是您可以爲用戶的Facebook信息(即信息源,照片,喜歡,評論等)提出請求。最簡單(也是最好)的方法是通過FB SDK自行完成。 SDK會在幕後處理很多事情,比如隨着時間的推移訪問令牌驗證,令牌生命的延長,令牌的有效性等等。這樣,當發生更改時,您幾乎不用擔心同步服務器信息和實時客戶端信息。只需通過FB iOS SDK進行身份驗證,然後執行其他自己的處理。
評論下面如果有什麼我應該澄清,或者即使我完全錯過了你的問題的重點 - 我傾向於捲起來,並可能偏離重點。 :)
乾杯! The Kraken
任何你不想使用Facebook iOS SDK提供SSO客戶端的原因,然後只是傳遞一個令牌給你的服務器說用戶「X」已經登錄,從而開始一個會話? – Apollo