Http 302 重定向到深层链接在 Android 中不起作用

Posted

技术标签:

【中文标题】Http 302 重定向到深层链接在 Android 中不起作用【英文标题】:Http 302 redirect to deep link does not work in Android 【发布时间】:2018-09-26 04:16:03 【问题描述】:

我们在 iosandroid 上都有一个应用程序。它们都实现了相同的深层链接 (例如 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】:

我相信您的问题可能是由特定的浏览器行为引起的。在 Android 上,Chrome 处理 URI 方案的方式与 Android 浏览器不同。我的倾向是您正在使用 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 商店应用页面。如果您不使用此变量,只需删除意图字符串的整个“S.browser_fallback_url=”部分即可。

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

【讨论】:

感谢您的回复。我们已经对其进行了测试,它似乎可以在我们的 android 设备上运行。但是,对于意图链接,字符串末尾有“end”非常重要。也就是说,深层链接应该是类似 intent://home?abc=xxx&bcd=yyy#Intent;scheme=myapp;end 太棒了!谢谢,我会把它添加到我的回复中

以上是关于Http 302 重定向到深层链接在 Android 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 301 重定向而不是 302 将 HTTP 站点重定向到 HTTPS 站点

302重定向到非HTTP协议

CTF_WriteUp_HTTP——302临时重定向问题

从 facebook 重定向到 ios 应用程序 - 深层链接

302 重定向是如何发生的?

为啥 rev 规范链接总是使用 302 重定向