Http 302重定向到深层链接在Android

时间:2018-04-16 12:12:15

标签: android deep-linking http-redirect

我们在iOS和Android上有一款应用。它们都实现了相同的深层链接 (例如myapp:// home /?abc = xxx& bcd = yyy)

我们已经在iOS和Android中测试过,深层链接已经完成,它可以打开我们的应用程序。

然后我们创建一个API服务。 (例如https://myapp.com/testing/1234568

当用户点击此链接时,它将使用HTTP标头User-Agent确定用户是否是移动客户端。

如果客户端是移动的,它将返回HTTP 302,其Location位置等于我们的深层链接 请求和响应是这样的:

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,它不起作用。单击链接后,用户无法重定向到我们的应用程序。它仍然留在空白页面。

我已经测试过使用如下javascript的html:

<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将用户重定向回移动应用程序?

1 个答案:

答案 0 :(得分:2)

我认为您的问题可能是由特定的浏览器行为引起的。在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编码的网站网址,以便在未安装应用时回退到该网址。如果未指定,则默认选项是打开Play商店应用页面。如果你不使用这个变量,只需删除意图字符串的整个'S.browser_fallback_url ='部分。

另一种选择是只使用Branch进行深层链接。他们在更新和更改时已经涵盖了所有这些边缘情况。