使用 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?