Имаме:
(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-via-oauth-the-page-requested-was-not-found
Проблемът с този въпрос обаче възниква, след като потребителят въведе потребителско име и парола във формуляра на Facebook. Нашият проблем е, че не можем да покажем формуляра за влизане във Facebook на първо място. Промяната на типа приложение от „Web“ на „Native/Desktop“, както беше предложено в този въпрос, не помогна.
Стъпки:
1. Отворете нашата уеб страница (обикновена HTML страница) с този UIWebView
браузър
2. Щракнете върху бутона за стартиране на „FB web app“ на тази страница
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?...със next... в параметрите
последвано от sqlite грешка
--точно сега виждам „Съжалявам, нещо се обърка” страница от facebook (за първи път я срещам)
iOS 6.0 “incorrect2”
заявка до www.facebook.com/dialog/oauth?...
заявка до fbwebapp.com
-(void)webView:(UIWebView*)webView didFailLoadWithError:(NSError*)грешка се извиква с код на грешка -999
Можете да видите, че поведението определено зависи от версията на iOS. Но често срещаният случай е грешката да се случи на стъпката за получаване на m.facebook.com/login.php.. URL. Но това е всичко, което можем да открием.
Цял ден си удряме главите в стената в търсене на решения. Безнадеждно.
Можете ли да ни помогнете да отворим страницата за вход във Facebook в UIWebView
в отговор на OAuth?