我的 iOS 应用有一个在 UIWebView 中设置的登录页面。它还具有 Facebook 和 G+ 登录。我可以让正常的登录屏幕正常工作,好吧。但是当我使用 Facebook 和 G+ 这样做时,我遇到了问题。我假设原因是单击按钮弹出的新窗口。
有什么方法可以在不求助于手动登录的情况下处理这个问题?
Best Answer-推荐答案 strong>
使用原生 Facebook 和 G+ 登录会容易得多。您要完成的工作比使用 native 登录要复杂得多。
如果你真的出于某种原因必须在 UIWebView 中执行此操作,则必须实现如下策略:
覆盖 UIWebViewDelegate 协议(protocol)的 -(BOOL)webViewUIWebView *)webView shouldStartLoadWithRequestNSURLRequest *)request navigationTypeUIWebViewNavigationType)navigationType 方法。
在您的实现中,您应该在另一个模态 UIWebView 中打开登录界面并在那里处理登录事件,并在关闭该模态视图时,如果登录成功继续应用流程。
看起来像这样:
-(BOOL)webViewUIWebView *)webView shouldStartLoadWithRequestNSURLRequest *)request navigationTypeUIWebViewNavigationType)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];
}
然后,用于登录的模态视图 Controller 还必须实现如何处理可能的登录事件的逻辑,并在成功时自行关闭,这将非常复杂。
第一个 webView 还必须知道模式何时被关闭(可以通过协议(protocol)或其他方式完成),然后检查登录状态,如果成功则继续。
所以,正如我所说,最好使用 native 登录。
关于ios - 使用 UIWebView 登录 Facebook 和 G+,我们在Stack Overflow上找到一个类似的问题:
https://stackoverflow.com/questions/35792200/
|