2012-03-22 104 views
4

我在我的iOS項目中使用FBConnect來授權用戶(SSO)。FBConnect登錄,與webview共享?

一旦登錄,我有時需要打開Webview才能顯示用戶特定的對話框,例如應用程序請求對話框(邀請到應用程序),甚至在我的應用程序用戶的webview中打開朋友的個人資料頁面瀏覽。

問題是,Webview無法識別登錄的用戶並要求他再次登錄,這不是很友好。

任何想法如何與webview共享登錄的身份驗證密鑰/ cookie /東西?

回答

5

您可能會遇到這種情況。這真是令人沮喪。

Facebook iOS SDK not storing cookies for access

你可以,如果你願意,強制的iOS庫使用您的應用程序進行登錄,並通過一個UIWebView本地您的應用授權。您因此登錄並使用Cookie。你必須添加一個方法到現有的Facebook對象。通常情況下,你叫:

- (void) authorize:(NSArray *)permissions 
      delegate:(id<FBSessionDelegate>)delegate 

授權,這反過來調用私有方法:

- (void)authorizeWithFBAppAuth:(BOOL)tryFBAppAuth 
        safariAuth:(BOOL)trySafariAuth 

設置爲YES這兩個參數。

你想添加一個公共方法,調用相同的私人功能,但兩個參數設置爲NO。我在Facebook.h添加了這個方法Facebook.m並宣佈它,所以我可以把它叫做但是我喜歡:

- (void)authorize:(NSArray *)permissions 
     tryFBApp:(BOOL) tryFBApp 
    trySafariAuth:(BOOL) trySafariAuth 
     delegate:(id<FBSessionDelegate>)delegate { 

    [_permissions release]; 
    _permissions = [permissions retain]; 

    _sessionDelegate = delegate; 

    [self authorizeWithFBAppAuth:tryFBApp safariAuth:trySafariAuth]; 
} 

我打電話,在兩國BOOL參數設置爲NO,和庫彈出窗口本地UIWebView給我留下了可用於應用程序的Cookie。

+0

這種方法仍然會爲我的iOS應用程序提供一個身份驗證密鑰嗎?或只爲網頁瀏覽?還有,聽起來像webview會要求用戶登錄?整點就是使用新的Facebook單點登錄方法來依賴Facebook應用程序,而不是要求用戶輸入用戶名和密碼,這是否會支持SSO? – 2012-03-23 22:35:39

+0

是的,你會得到一個有效的驗證令牌來進行圖形請求。你必須在某個地方登錄,所以是的,當你打電話時,如果cookies不再有效,這會給你帶來登錄挑戰。您可以保留身份驗證令牌和cookie,並重新使用它們 - 如果您在權限中請求脫機訪問,則cookies很長一段時間會有效。不,這不符合依賴於SSO的事情,比如FB稱爲深度鏈接。你必須選擇你的毒藥。無法將FB應用程序SSO用作您的阿姨方法,並且無需重新進行身份驗證即可在您的應用程序中打開Web視圖。 – giff 2012-03-24 22:50:24

+0

就這麼清楚 - 不,這不是SSO兼容 - 用戶必須至少爲您的應用程序提供一次憑據。沒有辦法繞過它。但我寧願這樣做,讓我的所有認證都在一個塊中完成,而不是產生SSO可用的期望。 – giff 2012-03-24 23:00:36

0

FBConnect會爲您返回一個令牌,以便您可以訪問FB API而不是FB網站。不幸的是,這不會通過UIWebView登錄並設置正確的FB cookie。

另一個策略是更改FBConnect源代碼,將其重定向到您自己的UIWebView,而不是標準FB彈出到FB-APP進程,並讓它們只登錄一次。然而,你將不得不堅持UIWebView的cookie狀態。

我建議你也看看http://www.getsocialize.com這可以幫助你管理社交網絡集成。

祝你好運!