我按照this other question中的說明在我的應用中爲webviews設置了自定義UserAgent。具體而言,我正在設置覆蓋UIWebView用戶代理 - 但不適用於Facebook SDK
NSDictionary *dictionary = [NSDictionary dictionaryWithObjectsAndKeys:@"MyApp/MyLongVersionInfoString", @"UserAgent", nil];
[[NSUserDefaults standardUserDefaults] registerDefaults:dictionary];
在應用程序啓動時。 (只需爲UIWebView使用的NSMutableURLRequest設置適當的頭文件 - UserAgent,User-Agent,User_Agent - 不起作用。)
這會導致我的嵌入式webviews使用正確的用戶代理。但是,它也打破了Facebook SDK用於對話框的嵌入式網頁瀏覽 - 例如,在發佈到我的牆上之後,FB對話框webview的內容被替換爲文本類似於window.location.href="fbconnect:\/\/success?post_id=100002469633196_43677789308119...
,並且webview未關閉通常會(用戶必須手動關閉它)。這隻發生在我設置了自定義用戶代理時。
我想我可以通過在Facebook調用並重置之前取消設置用戶代理來避開這個問題,但似乎我無法取消默認的默認設置;我在每次Facebook調用之前嘗試呼叫[[NSUserDefaults standardUserDefaults] removeObjectForKey:@"UserAgent"]
和[[NSUserDefaults standardUserDefaults] removePersistentDomainForName:NSRegistrationDomain]
,並在調用的結果處理程序中再次設置它們,但我仍然看到相同的錯誤行爲。
我想我的切換初始設置[[NSUserDefaults standardUserDefaults] setObject:newUA forKey:@"UserAgent"];
,但隨後我網頁視圖不拿起用戶代理。
當然,有人已經在使用非Facebook嵌入式網頁瀏覽的應用程序之前使用過Facebook SDK。我錯過了什麼?我在這方面進行了多輪討論,每一個似乎都能解決所有問題。