2011-05-12 105 views
7

你好,我在我的android手機上使用facebook sdk for android,並使用單一登錄。它在我登錄Facebook應用程序時正常工作,我的應用程序也登錄了。 對於註銷,我遇到了困惑。Android:facebook sdk註銷問題?

我實現的方式是從應用程序的用戶首選項中恢復訪問令牌和過期日期,並檢查會話的有效性。如果過期,應用程序會調用facebook.authorized函數,一旦授權訪問令牌和過期日期將再次更新。

處理註銷時,我發現有些事情有點混亂。

1)當我從Facebook應用程序註銷時,我的應用程序仍然可以通過並請求用戶詳細信息。儘管我的應用程序上保存的訪問令牌與facebook應用程序沒有任何關係,但我認爲在請求數據時至少會給我一個錯誤。但它沒有給我錯誤。

它假設是這樣的。從Facebook應用程序註銷不會影響我存儲在我的應用程序中的訪問令牌。

2)當我從我的應用程序註銷而不是Facebook應用程序時,Facebook應用程序不會自動註銷。

回答

9

Facebook訪問令牌和您的應用程序訪問令牌是分開的和獨特的,因此完全有可能一個人可以有效並允許訪問,而另一個無效且需要重新授權。

如果Facebook應用程序已登錄但您的應用程序沒有登錄,那麼Facebook SDK將使用現有的Facebook應用程序登錄名爲您的應用程序獲取新的訪問令牌而無需進行身份驗證,但這仍未鏈接到Facebook應用程序以任何方式登錄令牌。

如果Facebook應用程序未安裝或未登錄,那麼Facebook SDK將帶您前往Facebook網站進行初始身份驗證,但由於您的Facebook帳戶之間沒有連接,因此不會登錄Facebook應用程序訪問令牌和Facebook訪問令牌。

因此,總之 - 你的理解是正確的。除了您的應用程序嘗試對用戶進行身份驗證之外,這兩個應用程序之間沒有任何交互,那麼Facebook應用程序將充當代理,只要Facebook登錄就可以在沒有身份驗證的情況下獲得訪問權限。之後,就沒有進一步的了互動和你觀察到的是預期的和預期的行爲。

+0

因此,如果用戶授予[我]應用程序的訪問權限,他將永遠通過身份驗證,如果他登錄到[官方] Facebook應用程序?即使我嘗試在[my]應用程序中調用facebook.logout(上下文)?對不起,但我有點困惑。 – harsimranb 2012-01-09 19:34:40

+0

是的 - 只要您的應用程序有權訪問Facebook帳戶,使用Facebook API,並且官方Facebook應用程序仍然登錄,那麼下次您啓動應用程序時,它將使用Facebook應用程序獲取新的應用程序訪問令牌,並將默認驗證。這就是單點登錄應該如何工作。 – RivieraKid 2012-01-10 00:40:09

+0

因此,是facebook.isSessionValid()檢查用戶是否實際登錄的正確方法?因爲即使用戶登錄,facebook.isSessionValid()也會返回true。 – harsimranb 2012-01-10 01:56:05

0

我有同樣的問題。我正在考慮創建一個「isLogged」變量並存儲它,以便當某人註銷並重新啓動應用程序時,它甚至不會驗證用戶是否繞過了Facebook的會話驗證。