Ios Facebook和G+;使用UIWebView登录

Ios Facebook和G+;使用UIWebView登录,ios,objective-c,facebook,uiwebview,Ios,Objective C,Facebook,Uiwebview,我的iOS应用程序有一个在UIWebView中设置的登录页面。它还拥有Facebook和G+登录。我可以让正常的登录界面工作,好吗。但当我用Facebook和G+这样做时,我遇到了问题。我假设原因是点击按钮弹出的新窗口。 有没有办法不用手动登录就能解决这个问题?使用原生Facebook和G+登录会容易得多。您试图完成的任务比使用本机登录要复杂得多 如果出于某种原因,您真的必须在UIWebView中执行此操作,则必须实施以下策略: -(BOOL)webView:(UIWebView *)webVi

我的iOS应用程序有一个在
UIWebView
中设置的登录页面。它还拥有Facebook和G+登录。我可以让正常的登录界面工作,好吗。但当我用Facebook和G+这样做时,我遇到了问题。我假设原因是点击按钮弹出的新窗口。
有没有办法不用手动登录就能解决这个问题?

使用原生Facebook和G+登录会容易得多。您试图完成的任务比使用本机登录要复杂得多

如果出于某种原因,您真的必须在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];

}
  • 重写
    -(BOOL)webView:(UIWebView*)webView应加载请求:(NSURLRequest*)请求导航类型:(UIWebViewNavigationType)导航类型
    UIWebViewDelegate
    协议的方法

  • 在您的实现中,您应该在另一个模式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];

}
然后,用于登录的模态viewControllers还必须实现如何处理可能的登录事件的逻辑,并在成功时自行处理,这将非常复杂

第一个webView还必须知道模式何时被取消(可以通过协议或其他方式完成),然后检查登录状态,如果成功则继续


所以,正如我所说的,最好使用本机登录。

请详细说明。。我不明白你想说什么do@EICaptain有一个“登录”按钮,是我本机实现的。它连接到UIWebView。UIWebView加载一个有两个按钮的网页——“Facebook登录和Google+登录”。这完全是在网络上完成的。但是UIWebView不能正确响应这些点击。也就是说,它不会通过Facebook或Google+登录。当您使用iOS Safari浏览器打开登录页面时,登录页面是否工作?@SidharthJDev正如Jehna1所提到的,当您在Safari中打开时,登录页面是否工作?如果这样做有效,那么您需要在AppDelegate上检查URL是否正在
-(BOOL)应用程序:(UIApplication*)应用程序openURL:(NSURL*)URL源应用程序:(NSString*)源应用程序注释:(id)注释
是的,它在safari中确实有效