我们有:
(1) 具有 Facebook OAuth 功能的基于 Facebook API 的网络应用程序(“FB 网络应用程序”)
(2)UIWebView
基于 iPad 的浏览器(“浏览器”)
我们的目标是在 iPad 上的基于 UIWebView 的浏览器 (2) 中打开 Facebook 登录页面以登录到 FB Web 应用程序 (1)。
这里有一个类似的问题:http:
//facebook.stackoverflow.com/questions/11337285/no-longer-able-to-login-to-ios-app-via-oauth-the-page-requested-was-未找到
但是,该问题的问题发生在用户在 Facebook 表单中输入登录名和密码之后。我们的问题是我们无法首先显示 Facebook 登录表单。如该问题中所建议的,将应用程序类型从“Web”更改为“Native/Desktop”并没有帮助。
步骤: 1. 使用此浏览器
打开我们的网页(简单的 HTML 页面)
2. 点击此页面上的“FB web app”启动按钮
3. OnClick JavaScript 尝试启动 OAuth,这应该会打开 Facebook 的登录屏幕进行登录到 FB 网络应用程序 UIWebView
当前结果(问题):
在 iOS 5.+ 和 iOS 6.+ 设备上
- 我们的网页保持不变
- Facebook 登录页面未显示(我们的网页仍然显示)
在 iOS 4.3 上(按预期工作):
- Facebook登录页面在浏览器的同一UIWebView
对象中打开(替换我们的网页)
预期结果:
- 显示 Facebook 登录页面,用户可以输入 Facebook 登录名和密码
- 如果在 iPad 上的 Safari 浏览器中启动,则适用于 iOS 5.+ 和 iOS 6.+。Facebook 登录页面在单独的选项卡中打开(相比之下,没有单独的选项卡UIWebView
)
问:如何UIWebView
在 iOS 5+ 和 iOS 6+ 上打开 Facebook 登录页面以响应 OAuth 请求?
更多技术细节:
我们从内部记录不同的NSURLRequest
字段
-(BOOL)webView(UIWebView*)webView shouldStartLoadWithRequest(NSURLREquest*)request navigationType:…
我们注意到日志中“正确”和“不正确”行为的一些差异。执行流程对我来说是这样的:
首先,我按“FB Web App”启动按钮启动 OAuth,然后有些情况下
iOS 4.3,“正确”<br> 请求 www.facebook.com/dialog/oauth?...
请求 fbwebapp.com
请求 m.facebook.com/login.php?....
--here facebook login出现
iOS 5.0,“不正确1”<br> 对 www.facebook.com/dialog/oauth 的请求?...
对 fbwebapp.com
的请求 对 m.facebook.com/login.php 的请求?...
那么它可能是
——很多 m.facebook.com/login.php?...with next... in parameters
随后是 sqlite 错误——
现在我看到来自 facebook 的“抱歉,出了点问题”页面(这是一个我第一次遇到它)
iOS 6.0 “不正确2”<br> 对 www.facebook.com/dialog/oauth 的
请求?...对 fbwebapp.com 的请求
-(void)webView:(UIWebView*)webView didFailLoadWithError:(NSError*)error 被调用,错误代码为 -999
您可以看到该行为肯定取决于 iOS 版本。但常见的情况是在获取 m.facebook.com/login.php.. URL 的步骤中发生错误。但这就是我们能检测到的全部。
我们整天都在撞墙寻找解决方案。无可救药。
您能帮我们打开 Facebook 登录页面UIWebView
以响应 OAuth 吗?