use*_*802 6 facebook oauth ios5 facebook-login ios6
我们有:
(1)基于Facebook API的Web应用程序,具有Facebook OAuth功能("FB web app")
(2)UIWebView基于iPad的浏览器("浏览器")
我们的目标是打开Facebook登录页面以登录iPad上基于UIWebView的浏览器(2)内的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.使用此UIWebView浏览器打开我们的网页(简单的HTML页面)
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. +上工作,如果在iPad上的Safari浏览器中启动.Facebook登录页面在单独的选项卡中打开(相比之下,没有单独的选项卡UIWebView)
问题:如何UIWebView在iOS 5+和iOS 6+上响应OAuth请求打开Facebook登录页面?
更多技术细节:
我们NSURLRequest从内部记录不同的字段
-(BOOL)webView(UIWebView*)webView shouldStartLoadWithRequest(NSURLREquest*)request navigationType:…
Run Code Online (Sandbox Code Playgroud)
我们注意到"正确"和"不正确"行为的日志存在一些差异.这里执行流程如何看待我:
首先,我按"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错误 -
现在我看到facebook上的"抱歉,出了问题"页面(这是一个我第一次遇到它)
iOS 6.0"
wrong2 "
请求www.facebook.com/dialog/oauth?...
请求fbwebapp.com
- (void)webView:(UIWebView*)webView didFailLoadWithError:(NSError*)错误被调用,错误代码为-999
你可以看到这种行为肯定取决于iOS版本.但常见的情况是在获取m.facebook.com/login.php .. URL的步骤中发生错误.但这就是我们能够发现的一切.
我们正在全力以赴地寻找解决方案.绝望.
您能否帮助我们UIWebView在响应OAuth时打开Facebook登录页面?
小智 0
使用 FBDialog 类提示用户登录。这使用应用程序内部的 webview,因此成功登录后,用户将在任何 UIWebView 内部登录:
NSString *kRedirectURL = @"fbconnect://success";
NSString *kSDK = @"ios" ;
NSString *kLogin = @"oauth";
NSString *kDialogBaseURL = @"https://m.facebook.com/dialog/";
NSMutableDictionary* params = [NSMutableDictionary dictionaryWithObjectsAndKeys:
AE_FACEBOOK_APPID, @"client_id",
@"user_agent", @"type",
kRedirectURL, @"redirect_uri",
@"touch", @"display",
kSDK, @"sdk",
nil];
NSString *loginDialogURL = [kDialogBaseURL stringByAppendingString:kLogin];
FBLoginDialog* loginDialog = [[FBLoginDialog alloc] initWithURL:loginDialogURL
loginParams:params
delegate:self];
[loginDialog show];
Run Code Online (Sandbox Code Playgroud)
然后使您的类遵守 FBDialogDelegate 协议,并将此函数添加到您的类中:
-(void)fbDialogLogin: (NSString *)token expirationDate:(NSDate *)expirationDate{
// Store the token and expiration date into the FB SDK
self.facebook.accessToken = token;
self.facebook.expirationDate = expirationDate;
// Then persist these so the SDK picks them up on next load
NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:self.facebook.accessToken forKey:ACCESS_TOKEN_KEY];
[defaults setObject:self.facebook.expirationDate forKey:EXPIRATION_DATE_KEY];
[defaults synchronize];
}
Run Code Online (Sandbox Code Playgroud)
哈!
| 归档时间: |
|
| 查看次数: |
12623 次 |
| 最近记录: |