У нас есть:
(1) веб-приложение на основе Facebook API с функциональностью Facebook OAuth («веб-приложение FB»)
(2) браузер на базе UIWebView
для iPad («Браузер»)
Наша цель — открыть страницу входа в Facebook для входа в веб-приложение FB (1) внутри браузера на основе UIWebView (2) на iPad.
Здесь есть несколько похожая проблема:
http://facebook.stackoverflow.com/questions/11337285/no-longer-able-to-login-to-ios-app-через-oauth-запрошенная-страница-не-найдена
Однако проблема с этим вопросом возникает после того, как пользователь вводит логин и пароль в форму Facebook. Наша проблема в том, что мы не можем отобразить форму входа в Facebook в первую очередь. Изменение типа приложения с «Web» на «Native/Desktop», как предлагается в этом вопросе, не помогло.
Шаги:
1. Откройте нашу веб-страницу (простую HTML-страницу) в этом UIWebView
браузере
2. Нажмите кнопку запуска веб-приложения FB на этой странице
3. OnClick JavaScript попытается инициировать OAuth, который должен открыть экран входа в Facebook, чтобы войти в веб-приложение FB
Текущий результат (проблема):
На устройствах iOS 5.+ и iOS 6.+
- Наша веб-страница остается неизменной
- Страница входа в Facebook НЕ отображается (наша веб-страница по-прежнему отображается)
В iOS 4.3 (работает как положено):
- страница входа в Facebook открывается в том же UIWebView
объекте браузера (заменяет нашу веб-страницу)
Ожидаемый результат:
— Отображается страница входа в Facebook, и пользователь может ввести логин и пароль Facebook
— Работает на iOS 5.+ и iOS 6.+ при запуске в браузере Safari на iPad. Страница входа в Facebook открывается в отдельной вкладке (в отличие от UIWebView
, в которой нет отдельных вкладок)
Вопрос: Как заставить UIWebView
открывать страницу входа в Facebook в ответ на запрос OAuth на iOS 5+ и iOS 6+?
Больше технических деталей:
Мы регистрируем различные NSURLRequest
полей изнутри
-(BOOL)webView(UIWebView*)webView shouldStartLoadWithRequest(NSURLREquest*)request navigationType:…
И мы замечаем некоторую разницу в логах для «правильного» и «неправильного» поведения. Вот как у меня выглядят потоки выполнения:
Во-первых, я нажимаю кнопку запуска «FB Web App», чтобы инициировать OAuth, затем в некоторых случаях
iOS 4.3, «правильный»
запрос на www.facebook.com/dialog/oauth?...
запрос на fbwebapp.com
запрос на m.facebook.com/login.php?... .
--здесь появляется логин facebook
iOS 5.0, «incorrect1»
запрос на www.facebook.com/dialog/oauth?...
запрос на fbwebapp.com
запрос на m.facebook.com/login.php?...
Тогда это может быть
--много m.facebook.com/login.php?...with next… в параметрах
с последующей ошибкой sqlite
--сейчас я вижу «Извините, что-то пошла не так» страница из фейсбука (впервые с таким сталкиваюсь)
iOS 6.0 «incorrect2»
запрос на www.facebook.com/dialog/oauth?...
запрос на fbwebapp.com
-(void)webView:(UIWebView*)webView didFailLoadWithError:(NSError*)вызывается ошибка с кодом ошибки -999
Вы можете видеть, что поведение определенно зависит от версии iOS. Но частым случаем является то, что ошибка возникает на этапе получения URL-адреса m.facebook.com/login.php... Но это все, что мы можем обнаружить.
Мы целый день бьемся головой об эту стену в поисках решения. Безнадежно.
Можете ли вы помочь нам открыть страницу входа в Facebook в UIWebView
в ответ на OAuth?