gpt4 book ai didi

javascript - 原生 ios6 UIWebView 中的 Facebook Javascript 登录(WORKS ON SAFARI)

转载 作者:行者123 更新时间:2023-12-04 02:08:41 26 4
gpt4 key购买 nike

我正在寻找有关在带有 UIWebView 的 native iOS 6 应用程序中运行 FB.login() 的解决方案。我已经调试了很多,还没有找到解决方案。

问题是:当调用 fb.login 时,我的应用程序会打开一个新的 UIWebView 来处理它(就像 safari 打开一个新选项卡一样)。出现 Facebook 登录,但是当它登录时,出现一个空白页面并且没有任何反应(根 UIWebView 中都没有)...有人知道完成 fb.login js 流程的解决方案吗?

谢谢大家!

附言:没有帮助的链接--

How can I get UIWebView to open Facebook login page in response to the OAuth request on iOS 5 and iOS 6?

https://stackoverflow.com/questions/13387272/fb-login-issue-with-ios-6

最佳答案

做到了!

有点 hack,但 iOS 6 上 UiWebView 上的 js facebook sdk 登录终于可以用了。

如何实现?它是一个纯 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){
//UIWebView login 'callback' handler
var auth = response.authResponse;
if(auth.status == 'connected'){
//user is connected with facebook! just log him at your webapp
}
});

并且通过应用程序的 UIWebView 委托(delegate)函数,您可以处理 facebook oauth 响应

objective-c - 第三步)

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
NSString *url = [[request URL] absoluteString];

//when user status == connected (has a access_token at facebook oauth response)
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"];

//Facebook oauth response dead end: is a blank body and a head with a script that does
//nothing. But if you got back to your last page, the handler of authResponseChange
//will catch a connected status if user did his login and auth app
if([bodyHTML isEqualToString:@""])
{
[self backToLastPage];
}
}

}

因此,当“重定向”用户到最后加载的页面时,第二步是处理 facebook 登录对话框中的用户操作。

如果我回答得太快,请问我!希望对您有所帮助。

关于javascript - 原生 ios6 UIWebView 中的 Facebook Javascript 登录(WORKS ON SAFARI),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17508173/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com