我们有:
(1) 具有 Facebook OAuth 功能的基于 Facebook API 的网络应用程序(“FB 网络应用程序”)
(2) iPad 上基于 UIWebView
的浏览器(“浏览器”)
我们的目标是在 iPad 上基于 UIWebView 的浏览器 (2) 中打开 Facebook 登录页面以登录 FB 网络应用程序 (1)。
但是,当用户在 Facebook 表单中输入登录名和密码后,就会出现该问题。我们的问题是我们无法首先显示 Facebook 登录表单。按照该问题中的建议,将应用程序类型从“Web”更改为“Native/Desktop”,但没有帮助。
步骤:
1. 用这个UIWebView
浏览器
打开我们的网页(简单的HTML页面)
2. 点击本页的“FB web app”启动按钮
3. OnClick JavaScript 尝试启动 OAuth,它应该打开 Facebook 的登录屏幕以登录到 FB web 应用程序
当前结果(问题):
在 iOS 5.+ 和 iOS 6.+ 设备上
- 我们的网页保持不变
- Facebook 登录页面未显示(我们的网页仍显示)
在 iOS 4.3 上(按预期工作):
- Facebook 登录页面在浏览器的相同 UIWebView
对象中打开(替换我们的网页)
预期结果:
- 显示Facebook登录页面,用户可以输入Facebook登录名和密码
- 如果在 iPad 上的 Safari 浏览器中启动,则适用于 iOS 5.+ 和 iOS 6.+。 Facebook 登录页面在单独的选项卡中打开(相比之下,UIWebView
中没有单独的选项卡)
问题:如何让 UIWebView
打开 Facebook 登录页面以响应 iOS 5+ 和 iOS 6+ 上的 OAuth 请求?
更多技术细节:
我们从内部记录不同的 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,“不正确1”
请求 www.facebook.com/dialog/oauth?...
请求到 fbwebapp.com
向 m.facebook.com/login.php 请求?...
那么可能是
-- 很多 m.facebook.com/login.php?...在参数中有下一个...
其次是sqlite错误
--现在我看到来自 facebook 的“抱歉,出了点问题”页面(这是我第一次遇到它)
iOS 6.0“不正确2”
请求 www.facebook.com/dialog/oauth?...
向 fbwebapp.com 请求
-(void)webView:(UIWebView*)webView didFailLoadWithError:(NSError*)error is invoked with error code -999
您可以看到该行为肯定取决于 iOS 版本。但常见的情况是错误发生在获取m.facebook.com/login.php.. URL 的步骤。但这就是我们所能检测到的全部。
我们整天都在用头撞墙寻找解决方案。无奈。
你能帮助我们在 UIWebView
中打开 Facebook 登录页面以响应 OAuth 吗?
最佳答案
只需使用:这段代码
if (![FBSDKAccessToken currentAccessToken])
{
FBSDKLoginManager *manager = [[FBSDKLoginManager alloc]init];
manager.loginBehavior = FBSDKLoginBehaviorWeb;
[manager logInWithReadPermissions:@[@"public_profile", @"email", @"user_friends"] handler:
^(FBSDKLoginManagerLoginResult *result, NSError *error) {
NSLog(@"result.token: %@",result.token.tokenString);
NSLog(@"%@",result.token.userID);
NSLog(@"%hhd",result.isCancelled);
}];
}
//此处 manager.loginBehavior = FBSDKLoginBehaviorWeb;
是您在 UIWebview
中打开 facebook 所需的全部内容
关于facebook - 如何让 UIWebView 打开 Facebook 登录页面以响应 iOS 5 和 iOS 6 上的 OAuth 请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13313225/