最近,公司有個專案需要提供 Facebook 身分驗證的機制,當然,就會想到使用 Xamarin.Auth 這個套件來使用;我之前在
Xamarin 工作紡
電子書中,也有交代如何透過 Xamarin.Auth ,進行市面上一般社群網站的 oAuth2 的身分驗證開發方法。
可是,很不幸的,不論是依據電子書所交代的步驟,或者直接開啟墊子書中所提供的範例專案,都無法進行身分驗證。
問題發生在,當輸入完成 Facebook 的帳號與密碼之後,因為是第一次使用,需要需要同意使用 Facebook App,不過,此時,畫面是被凍結住的,在這個網頁中,您無法點選任何操作與按鈕。
這個時候,當然會想到,會不會是 Xamarin.Auth 這個套件出了問題,不過,我之前也寫過了使用 Azure Mobile App 的身分驗證電子書,理所當然的,就會打開該電子書的範例專案來測試看看;不幸的是,兩者的情況都是一樣,網頁被凍結住了。
經過一番調查,看到這篇文章:
原來又是 Facebook 動了手腳,只有在 iOS 的環境中,無法正常地進行 Facebook 的身分驗證,而同樣的程式,在 Android 平台下,卻是可以正常運作的。
因此,按照該篇文章的指示,進行調整 Azure Mobile 的
MOBILESERVICESDOTNET_EXTENSION_VERSION
服務,最後的情況,當然也是一樣的,畫面被凍結了。Update the MOBILESERVICESDOTNET_EXTENSION_VERSION value from 1.0.478 to 1.0.479.
這個時候,突然想到9年以前處理的問題,便針對 iOS 的 WebKit 調整他的 User-Agent Webviews and User-Agent strings ,將 iOS 環境中的 WebKit 瀏覽器的 User-Agent 調整成為
Facebook for iOS User-Agent string
: Mozilla/5.0 (iPhone; CPU iPhone OS 8_2 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Mobile/12D508 [FBAN/FBIOS;FBAV/27.0.0.10.12;FBBV/8291884;FBDV/iPhone7,1;FBMD/iPhone;FBSN/iPhone OS;FBSV/8.2;FBSS/3; FBCR/vodafoneIE;FBID/phone;FBLC/en_US;FBOP/5]
底下為設定 WebKit User-Agent 的方法
string userAgent = "Mozilla/5.0 (iPhone; CPU iPhone OS 8_2 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Mobile/12D508 [FBAN/FBIOS;FBAV/27.0.0.10.12;FBBV/8291884;FBDV/iPhone7,1;FBMD/iPhone;FBSN/iPhone OS;FBSV/8.2;FBSS/3; FBCR/vodafoneIE;FBID/phone;FBLC/en_US;FBOP/5]";
NSDictionary dictionary = NSDictionary.FromObjectAndKey(NSObject.FromObject(userAgent), NSObject.FromObject("UserAgent"));
NSUserDefaults.StandardUserDefaults.RegisterDefaults(dictionary);
最後,當然是如期解決了問題,iOS 平台下,可以使用 Azure Mobile App 來進行 Facebook 的身分驗證了。
沒有留言:
張貼留言