2013-09-27 2 views
4

Я создал маршрутизатор, который подключается к facebook, чтобы получить информацию до того, как пользователь сможет получить доступ к Интернету.Facebook.com и iOS7 Captive Portal Detection

Сначала они соединяются, получают страницу Captive Portal, а затем продолжают вход в facebook. Начиная с обновления до iOS7 он не загружает страницу входа в facebook. На моем Mac с помощью Captive Portal Assistant у него нет проблем и даже на самом телефоне при использовании версии сафари iOS проблем нет.

Что здесь общего не работает? Является ли запрос фильтрации в facebook с помощью помощника по доступу к порталу iOS7 или Apple делает некоторые подлые вещи здесь?

Кажется, problem is widespread и касается только Facebook.

Обновление: Я работал с бета-версией, и они отлично работали несколько недель назад. Теперь с той же бета-версией этого больше нет. Итак, еще один момент для объяснения facebook.

С уважением, Cas

ответ

6

Эта проблема была решена с помощью Apple, так как 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 

Whitelisting эти домены останавливает регистрационную маску, которая будет появляться как устройство IOS считает, что интернет работает, как ожидалось. Таким образом, вы контролируете то, что происходит, поскольку устройство IOS не прерывает ничего, если вы используете обычный браузер для входа.

Если вы не пользуетесь белыми списками доменов, произойдет следующее. Я отлажена его на маршрутизаторах с несколькими устройствами IOS, и все они в основном то же самое:

  1. Если подключиться к Wi-Fi, устройство IOS пытается подключиться к одной из областей, которые перечислены выше. Если он может связаться с одним из доменов, он попробует другой. Если он не может, он запускает перенаправление, которое контролируется маршрутизатором. Иногда он запрашивает один или несколько доменов, прежде чем он думает, что интернет работает.
  2. После проверки экран входа в систему перенаправляется на ваш маршрутизатор, а затем на экран входа в ваш портативный портал. Такое поведение оставалось таким же, как и на IOS 6 или раньше.
  3. Теперь вы начинаете вход в систему со сторонним поставщиком, таким как Facebook, Google или Twitter. И теперь появляется разница. Вы можете проверить это на маршрутизаторе, если вы запустите его в режиме отладки. Поскольку устройство IOS переходит в другой домен для входа в систему (например, www.facebook.com), iPhone думает, что что-то изменилось и начинает запрашивать один из доменов apple, которые перечислены выше. Пользователь видит только белый экран, и в фоновом режиме устройство IOS пытается связаться с одним из доменов повторно. Для пользователя это кажется ошибкой, так как экран остается белым или занимает очень много времени, чтобы показать логин стороннего поставщика. Иногда он перестает загружаться, и ничего не происходит навсегда.

Чтобы избежать такого поведения, вы должны перечислить белые списки перечисленных выше доменов. Это не обычное поведение для пользователей IOS, но таким образом ваш браузер контролирует сеанс входа в систему, и устройство IOS не прерывает его, как это происходит с экраном входа.

Некоторые мелкие части информации сообщается на следующих сайтах:

Я не мог найти подробное описание этой проблемы и нашли один над собой, отлаживая все части с помощью некоторых маршрутизаторов и устройств IOS, таких как iPhones и iPads.

Если вы являетесь разработчиком, зарегистрированным в Apple, заполните, пожалуйста, сообщение об ошибке. Я могу помочь тебе. Надеюсь, Apple скоро это исправит.

+0

Это просто избегает диалога с появления , Мы хотим, чтобы диалог появился, но это делает, но перенаправление на facebook не работает. –

+0

Я знаю. Вы пытались отладить его на маршрутизаторе? Я сделал это, и я проверил поведение на маршрутизаторе и понял, что он делает. Я добавлю это в ответ, поскольку это слишком долго для комментария. – Fa11enAngel

+0

Проблема исчезла на IOS 8, но iPhone 4 не может быть обновлен до IOS 8, поэтому проблема по-прежнему одна. – Fa11enAngel

0

Я просто проверял различные настройки маршрутизатора и заметил, что IOS 7 НЕ пытается связаться с выше упомянутых сайтов/URL-, когда поле DOMAIN маршрутизатора пустым.

Я предполагаю, что пустой домен указывает на сеть потребительского типа, и Apple не ожидает Captive Portal в такой сети. Если у вас есть доступ к администрированию вашего маршрутизатора, посмотрите, можете ли вы удалить поле DOMAIN (и перезапустить/повторить проверку).

+2

Что вы имеете в виду с полем DOMAIN, пусто. Пожалуйста, объясните это. – Fa11enAngel

0

Я нашел решение своей проблемы. (некоторое время назад, но я снова нашел этот пост)

Сначала я узнал, что iOS выполняет 3 вызова, сначала для проверки, второй для получения страницы, которая должна отображаться, в-третьих, чтобы проверить снова после pageload. Затем я обнаружил, что для каждого действия POST или GET, сделанного страницей, обновление исходной страницы было обновлено, iOS проверяет наличие активного интернет-соединения. Поскольку facebook api делает много вызовов, браузер начинает останавливаться (возможно в сочетании с QoS на моем маршрутизаторе) и замораживает страницу.

Мое решение:

Поскольку я нахожусь в контроль DNS записей маршрутизатора я использую, я перенаправлены все домены к моему собственному серверу.

Сначала я сохранил запрос проверки, чтобы позже определить пользователя, когда он вернется для 3-го запроса.

Когда приходит второй запрос, я просто показываю информационное окно, в котором все правильно, и пользователь должен нажать кнопку «Готово».

Страница загружена, поэтому iOS проверяет снова, но я узнаю пользователя, поэтому я показываю OK-код Apple также отображается. Кнопка «Готово» мы показываем, и пользователь имеет «Интернет», согласно iOS ..

На странице, которую я показываю, я предлагаю пользователю открыть веб-браузер. Когда он это делает, он открывает страницу, и мой портал с правой страницей отображается (я могу обнаружить это на основе агента браузера). Затем моя facebook api начнет выполнять свою работу, и мы отправимся :-)

Сообщите мне, если кому-то нужна дополнительная информация о том, как определить или, возможно, даже образец кода, если необходимо.

Экстренная Информация Для захвата пользователя на вашем собственном сервере, перенаправлять каждый запрос на странице обработки, используя, например, .htaccess. Запрос делается в домен с подфайлом e.г: 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 trafic для скрипта nodejs. Этот скрипт позволяет каждому запросу проходить нормально, за исключением того, что пользовательский агент запускается с «CaptiveNetworkSupport». В этом случае я изменяю ответ, чтобы вернуть простую веб-страницу с ссылкой target = _blank. Нажав на эту ссылку, перенаправите пользователя на указанную страницу, но оставайтесь на портале Captive и не открывайте Safari. –

 Смежные вопросы

  • Нет связанных вопросов^_^