更新到iOS版本9.3.3后,重定向url以启动应用程序不工作
在我的应用程序中,我有一个web视图,在其中加载登录屏幕(html页面)以进行身份验证(OAuth)。在身份验证成功后,我使用我将在响应中收到的自定义URI方案将流重定向到我的本机应用程序屏幕。在我升级到iOS版本9.3.3之前,这个设置以前一直在9.2.1版本的iPhone设备中运行。现在,我没有得到正确的重定向URL,而是得到一个错误弹出窗口,消息是“error:theURL不能显示” 我知道苹果发布的最新更新中发生了很多变化,尤其是在webkit上。还有其他人面临过类似的问题吗?这是新更新中的错误吗 如果有人能告诉我更新后重定向失败的原因,我将不胜感激更新到iOS版本9.3.3后,重定向url以启动应用程序不工作,ios,swift,swift2,Ios,Swift,Swift2,在我的应用程序中,我有一个web视图,在其中加载登录屏幕(html页面)以进行身份验证(OAuth)。在身份验证成功后,我使用我将在响应中收到的自定义URI方案将流重定向到我的本机应用程序屏幕。在我升级到iOS版本9.3.3之前,这个设置以前一直在9.2.1版本的iPhone设备中运行。现在,我没有得到正确的重定向URL,而是得到一个错误弹出窗口,消息是“error:theURL不能显示” 我知道苹果发布的最新更新中发生了很多变化,尤其是在webkit上。还有其他人面临过类似的问题吗?这是新更新
提前感谢欢迎使用安全升级9.3.3强>深度链接 首先,你应该接受通用链接,忘记URL方案 检查此转换教程: 如果你不想使用通用链接 您使用哪种委托方法来获取Scheme调用?我猜您正在使用:
-(BOOL) application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
在那种情况下。。。仔细检查您的URL方案中没有任何&、+、/,正在进行大量新编码,如果有,请将其转换为%encoding,这很好:
好:
坏的:
修复您的URL方案调用并完成它
开心点 我认为这是重复的,提问者似乎解决了这个问题。但答案有点模棱两可 因此,这里有一个具体的方法,至少可以解决我的环境(iOS 10.3设备和iOS 9.0&10.3模拟器)中的问题,我认为这个想法与上面的源代码相同,即响应html页面并在这个页面中重定向,如下所示
<html>
<head>
</head>
<body>
<script type="text/javascript">
setTimeout(function () {
window.location = "com.your.scheme://a/b?foo=bar";
}, 1);
</script>
<h1>redirect...</h1>
</body>
</html>
setTimeout(函数(){
window.location=“com.your。scheme://a/b?foo=bar";
}, 1);
重新使用
这是一种非常有症状的处理方法(比如使用setTimeout),可能会被未来的iOS版本所阻止,但我在这里为那些出于某种原因仍然需要使用URL方案的人写了这篇文章 我也面临同样的问题。。你找到解决办法了吗?这里也一样。。。我将悬赏以获得正确答案。我正在使用应用程序(uApp:UIApplication,openURL url:NSURL,options options:[String:AnyObject])->BoolI在webview委托中获得错误的重定向url,错误代码为NSURERRORDOMANI 101,上面写着“无法显示url”。因此,根本不会调用appdelegate。URL方案不包含任何这些字符,类似于您上面描述的“Good”。嘿!你能试试appN吗ame://HELLO 看看能不能买到?您是否尝试过最终的解决方案,即通用链接?这是可行的,但问题是,我们从服务器重定向响应接收url。我们在以前的所有版本中都收到了它,但在iOS v9.3.3中没有。wenview委托未收到此url。
myAppSchemeName://abc¶m=AppleIsTough
<html>
<head>
</head>
<body>
<script type="text/javascript">
setTimeout(function () {
window.location = "com.your.scheme://a/b?foo=bar";
}, 1);
</script>
<h1>redirect...</h1>
</body>
</html>