2013-09-27 41 views
4

我創建了一個連接到Facebook的路由器,以便在用戶訪問互聯網之前獲取一些信息。Facebook.com和iOS7強制門戶檢測

首先他們連接,獲取Captive Portal頁面,然後繼續進行Facebook登錄。由於升級到iOS7,它無法加載Facebook登錄頁面。在我的Mac上使用Captive Portal Assistant時,它沒有任何問題,甚至在使用iOS版Safari瀏覽器時也不會出現任何問題。

這裏怎麼回事?是來自iOS7 Captive Portal Assistant的Facebook過濾請求還是蘋果在這裏做了一些鬼鬼祟祟的東西?

看來problem is widespread只與facebook有關。

更新:我與測試版一起工作,他們幾周前工作得很好。現在使用相同的測試版本,它現在不再使用了。所以,另一點爲facebook解釋。

問候,中國科學院

回答

6

因爲IOS 8.此問題已修復由蘋果,但因爲所有的iPhone 4的用戶無法升級到IOS 8這個問題仍然是一個。

的IOS 7設備檢查以下領域:

www.appleiphonecell.com 
captive.apple.com 
captive.apple.com 
www.apple.com 
www.itools.info 
www.ibook.info 
www.airport.us 
www.thinkdifferent.us 

白名單這個域名被停止顯示爲iOS設備認爲登錄面具,互聯網是按預期工作。這樣你可以控制發生的事情,因爲如果你使用普通的瀏覽器登錄,IOS設備不會中斷任何事情。

如果您未將域列入白名單,則會發生以下事情。我在具有多個IOS設備的路由器上進行了調試,它們大部分都是一樣的:

  1. 如果連接到wifi,IOS設備會嘗試連接到上面列出的某個域。如果它可以聯繫其中一個域,它會嘗試另一個域。如果不能,它會啓動由路由器控制的重定向。在它認爲互聯網正在工作之前,它有時會查詢一個或多個域。
  2. 檢查後,登錄屏幕重定向到您的路由器,然後重定向到強制門戶的登錄屏幕。這一行爲與iOS 6或之前的版本保持不變。
  3. 現在您開始oauth登錄Facebook,Google或Twitter等第三方提供商。現在差異出現了。如果您在調試模式下運行它,您可以在路由器上進行檢查。當IOS設備進入oauth登錄的其他域(如www.facebook.com)時,iPhone會認爲某些內容已更改並開始查詢上面列出的某個Apple域。用戶只能看到一個白色的屏幕,並在後臺iOS設備嘗試重複連接其中一個域。對於用戶來說,這似乎是一個錯誤,因爲屏幕保持白色或需要很長時間才能顯示第三方提供商的登錄信息。有時它會停止加載,並且永遠不會發生任何事

要避免此行爲,您必須將以上列出的域列入白名單。這對IOS用戶來說不是一種常見的行爲,但這樣,您的瀏覽器就可以控制登錄會話,並且IOS設備不會像登錄屏幕那樣中斷它。

的一些信息淺部報告在以下網站:

我找不到這個問題的詳細描述和發現通過使用一些路由器和iOS設備(如iPhone和iPad)調試所有部件,我自己就可以了。

如果您是蘋果註冊開發者,請填寫錯誤報告。我能幫你。我希望蘋果能儘快修復它。

+0

這只是避免出現對話框。我們希望該對話框出現,但確實如此,但重定向到Facebook似乎不起作用。 –

+0

我知道。你有沒有試圖在路由器上進行調試?我做了它,我檢查了路由器上的行爲,並能理解它的功能。我會將其添加到答案中,因爲評論太長。 – Fa11enAngel

+0

IOS 8的問題已經消失,但iPhone 4無法更新到IOS 8,所以問題仍然存在。 – Fa11enAngel

0

我剛剛測試了各種路由器設置,發現的iOS 7並不試圖聯繫上述網站/網址當路由器的域字段爲空

我的猜測是,空白域指向一個消費類型的網絡設置和蘋果不期望在這樣的網絡的強制門戶網站。如果您有權管理路由器,請查看是否可以清除DOMAIN字段(並重新啓動/重新測試)。

+2

DOMAIN字段中的含義是空白的。請解釋一下。 – Fa11enAngel

0

我找到了解決我的問題的方法。 (前一段時間,但我發現這個帖子再次)

首先我發現,iOS做3次調用,首先檢查,第二次得到需要顯示的頁面,第三次在頁面加載後再次檢查。然後,我發現,對於頁面進行的每個POST或GET操作,關於源頁面的刷新,iOS會檢查活動的Internet連接。由於facebook api進行了大量調用,因此瀏覽器開始停止(可能與路由器上的QoS結合使用)並凍結頁面。

我的解決方案:

由於我在我用的是路由器的DNS記錄控制,我重定向所有領域對我自己的服務器。

首先我保存了檢查請求,以便以後在第三次請求返回時識別用戶。

當第二次請求到來時,我只是顯示一個信息窗口,說明每件事情都是正確的,用戶必須單擊「完成」按鈕。

頁面被加載,所以iOS再次檢查,但我認出用戶,所以我顯示OK代碼Apple也顯示。根據iOS,我們顯示「完成」按鈕並且用戶具有「互聯網」。

在我顯示的頁面上,我指示用戶打開網頁瀏覽器。當他這樣做時,他會打開一個頁面,並顯示我的門戶頁面(我可以根據瀏覽器代理檢測到)。然後我的Facebook API開始做它的工作,我們走:-)

讓我知道如果有人需要一些關於如何檢測或甚至如果有必要的代碼示例的更多信息。

其他信息 要在您自己的服務器上捕獲用戶,請使用例如.htaccess將每個請求重定向到您的處理頁面。該請求是對具有子文件e的域進行的。G: http://captive.apple.com/getrT09Nx7G/YNrnUOulnDj/3cfrq3M40iR.html

爲了讓多個用戶分開,使用唯一的URL設備嘗試互聯網檢查何時聯繫,在這種情況下:/getYT09Nx7G/YN1nUOulnDj/3cfMq3M40iR.html

+0

「在我顯示的頁面上,我指示用戶打開網頁瀏覽器。」你如何指導用戶這樣做?你知道一種讓用戶切換到Safari iOS的方法嗎?例如通過點擊一個鏈接。 –

+0

通過添加具有正確目標屬性的鏈接,它將打開Safari(target =「_ blank」) –

+0

不幸的是,我嘗試過,並且無法使其工作,至少在iOS 8.3上。我的PoC很簡單:我的wifi接入點有一個iptable規則來將tcp流量代理到nodejs腳本。該腳本讓每個請求都正常通過,除了用戶代理以「CaptiveNetworkSupport」開頭。在這種情況下,我修改響應以返回一個帶有target = _blank鏈接的簡單網頁。點擊此鏈接將用戶重定向到所述頁面,但保留在Captive門戶中,並且不要打開Safari。 –