我们有一个iOS和Android应用程序。他们两个都实现了相同的深层链接
(例如,myapp://home/?abc = xxx&bcd = yyy)
我们已经在iOS和Android上进行了测试,该深层链接可以正常工作,并且可以打开我们的应用程序。
然后,我们创建一个API服务。 (例如https://myapp.com/testing/1234568)
当用户单击此链接时,它将使用HTTP header User-Agent确定该用户是否为移动客户端。
如果客户端是移动客户端,它将返回HTTP 302,其Location header 等于我们的深层链接。
请求和响应是这样的:
GET /testing/1234568 HTTP/1.1
Host: myapp.com
Accept: */*
User-Agent: Mozilla/5.0 (Linux; Android 7.0; SM-G930V Build/NRD90M)
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.125 Mobile Safari/537.36
HTTP/1.1 302
Location: myapp://home/?abc=xxx&bcd=yyy
Content-Length: 0
此服务可以在iOS上完美运行,用户单击链接后将被重定向到我们的应用程序。
但是,对于Android,它不起作用。用户单击链接后无法重定向到我们的应用程序。它仍然保留在空白页中。
我已经测试过将html与javascript一起使用,如下所示:
<html>
<head>
<script type="text/javascript">
window.onload = function(){
window.location="myapp://home/?abc=xxx&bcd=yyy";
};
</script>
</head>
</html>
Android用户可以成功重定向回到应用程序。
但是,由于某些原因,我无法在我的API服务中返回html。
有什么方法可以在Android中使用HTTP 302将用户重定向回移动应用程序?
最佳答案
我相信您的问题可能是由特定的浏览器行为引起的。在Android上,Chrome无法以与Android浏览器相同的方式处理URI方案。我的倾向是您正在使用Chrome,并且应该使用Chrome Intents.本质上,在Chrome中,您应该使用以下格式的URI方案:
intent://<optional path>#Intent;scheme=<URI scheme>;package=<package>;S.browser_fallback_url=<optional encoded fallback URL>;end
URI方案[必需]:这是您在上面使用的相同URI方案
应用程序包名称[必需]:这是为项目配置的应用程序的包名称。
URI路径[可选]:如果要传递任何路径以进行路由
后备URL [可选]:这是一个可选字段,您可以在其中指定URL编码的网站URL,以便在未安装应用程序的情况下进行后备。如果未指定,则默认选项是打开Play商店应用页面。如果您不使用此变量,则只需删除 Intent 字符串的整个“S.browser_fallback_url =”部分即可。
另一个选择是仅使用Branch进行深层链接。它们在更新和更改时已经涵盖了所有这些极端情况。
关于android - HTTP 302重定向到深层链接在Android中不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49857050/