使用 UIWebView 在 iOS 应用程序中登录 Instagram 时出错

Posted

技术标签:

【中文标题】使用 UIWebView 在 iOS 应用程序中登录 Instagram 时出错【英文标题】:Error logging into Instagram in iOS app using UIWebView 【发布时间】:2016-06-06 15:15:16 【问题描述】:

我正在遵循Instagram authentication [推荐] 在 ios 应用上使用 UIWebView 的步骤。 输入凭据后,点击登录会加载一个页面并出现以下错误。

无法加载此页面。如果您在您的 浏览器,或者您正在以隐私模式浏览,请尝试启用 cookie 或关闭隐私模式,然后重试您的操作。

而且,这只发生在第一次通过身份验证步骤时;在下一次尝试中,一切都像丝绸一样光滑。我得到后缀为重定向 url 的代码,并使用它请求访问令牌。

截图:

已经有另一个问题here 没有帮助。

编辑: 好像是 Cookies 的问题。不过,我还没有修复它。

【问题讨论】:

当您看到此错误时可能会执行强制重定向? 你能解决这个问题吗? 不,不完全。我观察到 webView 的 shouldStartLoadWithRequest 遇到一点延迟会降低此错误发生的频率。 你的经理解决了这个问题吗? 【参考方案1】:

我在删除 cookie 以确保出现登录屏幕时遇到了类似的问题,而不仅仅是使用当前登录的用户。尝试(迅速):

let storage = HTTPCookieStorage.shared
storage.cookieAcceptPolicy = .always

【讨论】:

我在发布问题之前尝试过。不幸的是,它并没有解决我的问题。【参考方案2】:

大约一个小时前,我设法解决了这个问题。

首先,不要使用 UIWebView 或 WebView;请改用WKWebView。

你看,你需要实现方法

- (void)webView:(WKWebView *)webView didFailProvisionalNavigation:(null_unspecified WKNavigation *)navigation withError:(NSError *)error

当 instagram 的登录页面将您转发到您的 redirect_url 时,它无法导航。可能是因为我们没有进行服务器端身份验证,而只是进行客户端身份验证,并且 redirect_url 不是有效的 url。 我们期望页面重定向到一个无效的 url,但是当这种情况发生时,WKWebView 不会调用该方法

- (void)webView:(WKWebView *)webView didCommitNavigation:(WKNavigation *)navigation

或方法

- (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation

所以。您需要做的是专注于第一种方法,检查error 变量,然后提取error.userInfo

就我而言,这就是我解决问题的方法:

- (void)webView:(WKWebView *)webView didFailProvisionalNavigation:(null_unspecified WKNavigation *)navigation withError:(NSError *)error

   
    NSURL *err = [error.userInfo objectForKey:@"NSErrorFailingURLKey"];

    if([err.absoluteString hasPrefix:INSTA_REDIRECT_URL])
        NSString *token = [[err.absoluteString componentsSeparatedByString:@"#access_token="] objectAtIndex:1];
        
     
        [Utils saveToken:token];
        [self.webView setHidden:YES];
        //open next view controller
    else
        //TODO: No internet? something else went wrong..
        
        NSLog(@"Error: %@", error);
    
    

希望对您有所帮助。 祝你好运! ;)

【讨论】:

刚刚尝试过,但从未调用过 didFailProvisionalNavigation

以上是关于使用 UIWebView 在 iOS 应用程序中登录 Instagram 时出错的主要内容,如果未能解决你的问题,请参考以下文章

iOS:在 UIWebview 中使用 javascript 调用 obj-c 方法

使用没有alertView的UIWebView在iOS中以编程方式进行电话呼叫

Syncfusion 控件未在 iOS 本机 UIWebView 上加载

如何在 iOS 的 UIWebView 的文档目录中使用 Javascript?

iOS - 在 UIWebView 中嵌入 Facebook 视频

iOS 中 UIWebview 的 NSURLCache