搞定了!
这有点像是一个hack,但是在iOS 6上,js facebook sdk登录UiWebView终于可以使用了。
怎么做到的?这是一个纯JS + Facebook JS SDK + UIWebView Delegate处理函数的解决方案。
JS - 第一步)
一个登录按钮(用于连接Facebook)调用此函数示例,将触发Face JS登录/oauth对话框:
function loginWithFacebookClick(){
FB.login(function(response){
//normal browsers callback
});
}
JS - 第二步)
在用户加载网页后(FB.init()之后),每次都添加一个authResponseChange监听器以捕获用户的连接状态:
FB.Event.subscribe('auth.authResponse.Change', function(response){
var auth = response.authResponse;
if(auth.status == 'connected'){
}
});
通过应用程序的UIWebView委托函数,您可以处理Facebook OAuth响应
Objective C - 第三步)
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
NSString *url = [[request URL] absoluteString];
if([url hasPrefix:@"https://m.facebook.com/dialog/oauth"] && [url rangeOfString:@"access_token="].location != NSNotFound)
{
[self backToLastPage];
return NO;
}
return YES;
}
- (void)webViewDidFinishLoad:(UIWebView *)webView
{
NSString *url = [[webView.request URL] absoluteString];
if([url hasPrefix:@"https://m.facebook.com/dialog/oauth"])
{
NSString *bodyHTML = [webView stringByEvaluatingJavaScriptFromString:@"document.body.innerHTML"];
if([bodyHTML isEqualToString:@""])
{
[self backToLastPage];
}
}
}
所以,当“重定向”用户到最后加载的页面时,第二步是处理Facebook登录对话框中的用户操作。
如果我回答得太快,请问我!希望能帮到你。
backToLastPage
不再起作用了,对吧? - rAzOr