使用 UIWebView 登录 Facebook 和 G+
Posted
技术标签:
【中文标题】使用 UIWebView 登录 Facebook 和 G+【英文标题】:Facebook and G+ login with UIWebView 【发布时间】:2016-03-04 09:21:50 【问题描述】:我的 ios 应用有一个登录页面,该页面设置在 UIWebView
中。它还具有 Facebook 和 G+ 登录。我可以让正常的登录屏幕正常工作,好吧。但是当我使用 Facebook 和 G+ 这样做时,我遇到了问题。我假设原因是单击按钮弹出的新窗口。
有什么方法可以在不求助于手动登录的情况下处理这个问题?
【问题讨论】:
你能详细说明一下吗.. 我不明白你想做什么 @EICaptain 有一个“登录”按钮,我已经实现了本机。它连接到 UIWebView。 UIWebView 加载具有 2 个按钮的网页 - “Facebook 登录和 Google+ 登录”。它完全在网络中完成。但是 UIWebView 没有正确响应这些点击。即,它不会通过 Facebook 或 Google+ 登录 用 iOS Safari 浏览器打开登录页面是否有效? @SidharthJDev 正如 Jehna1 提到的,当您在 Safari 中打开时,它是否有效?如果这可行,那么您需要检查 AppDelegate 是否正在-(BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
上打开 URL
是的,它确实可以在 safari 中使用
【参考方案1】:
使用原生 Facebook 和 G+ 登录会容易得多。您要完成的工作比使用本机登录要复杂得多。
如果你真的出于某种原因必须在 UIWebView 中执行此操作,则必须实施如下策略:
覆盖UIWebViewDelegate
协议的-(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
方法。
在您的实现中,您应该在另一个模态 UIWebView 中打开登录界面并在那里处理登录事件,如果登录成功,则在该模态视图关闭时继续应用流程。
看起来像这样:
-(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
NSURL *url = [request URL];
//for facebook login
if ([[url absoluteString] containsString:@"m.facebook.com"] && [[url absoluteString] containsString:@"login"])
// instantiate and present new modal UIViewController containing UIWebView that loads the url.
return NO;
//for G+ something similar
return [super webView:webView shouldStartLoadWithRequest:request navigationType:navigationType];
然后,用于登录的模态视图控制器还必须实现如何处理可能的登录事件的逻辑,并在成功时自行关闭,这将非常复杂。
第一个 webView 还必须知道模式何时被关闭(可以通过协议或其他方式完成),然后检查登录状态,如果成功则继续。
所以,正如我所说,最好使用本机登录。
【讨论】:
以上是关于使用 UIWebView 登录 Facebook 和 G+的主要内容,如果未能解决你的问题,请参考以下文章
如何在 UIWebView 中使用 Facebook 评论插件
Facebook iOS SDK 登录原生和 UIWebView 登录
Facebook 登录在 Safari 中有效,但在 UIWebView 中无效