Доброго времени суток!
Задача: нужна авторизация пользователей WiFi. На iOS требуется открыть портал авторизации не в CNA, а в Safari. Собственно, это у меня получилось...почти.
iOS при подключении к WiFi делает определенный запрос, ожидая получить определенный ответ. Если этот ответ подделать, то iOS решит, что интернет открыт. Но тогда не покажется CNA, а это плохо.
Идея такая:
1. Первый запрос не подделываем. Возвращаем HTML, в котором есть ссылка, например,
click me. Откроется CNA (мааааленький ограниченный браузер);
2. Остальные запросы подделываем, как будто отвечает сам apple.
Частично это сработало. Если нажать на ссылку из п.1, CNA закроется, а ссылка начнет открываться в Safari. Вроде время радоваться, но шиш! Запрос уходит через мобильную сеть, а от WiFi-сети iOS молча отключается.
Я понимаю сейчас задачу так: когда CNA уже на экране, заставить iOS думать, что доступ в Интернет через этот WiFi уже открыт. Тогда iOS не отключится от WiFi и запрос в браузере уже пойдет правильно и будет счастье! Как это сделать, пока не догнал(
Решение явно существует. В московском метро это сделали.
Люди, помогите! Нет возможности кататься по метро и снифить трафик((
P.S. Стандартый CNA не подходит, т.к. он закрывается и отключается от WiFi на каждый чих. В моем случае, пользвателю иногда требуется зайти в приложение SMS и затем вернуться на портал.
UPD. : в CNA есть кнопка "Готово". Если ее нажать, вместо ссылки, то iOS решает, что доступ в Интернет есть. Вероятно, нужно как-то сэмулировать нажатие этой кнопки при переходе по ссылке