带有重定向的通用链接在 iOS 中不起作用
Posted
技术标签:
【中文标题】带有重定向的通用链接在 iOS 中不起作用【英文标题】:Universal links with redirects not working in iOS 【发布时间】:2017-08-03 22:43:30 【问题描述】:公司域链接最终出现在 ios 应用中。通过 MailChimp 从电子邮件网站重定向到公司网站的链接最终出现在 iOS 应用程序中。
但是,通过邮件应用程序(邮件、Gmail 等)中点击的 MailChimp 跟踪链接重定向到公司域网站的链接最终会出现在公司网站的 Safari 中。
是否有任何解决方法可以将带有重定向功能的 MailChimp 电子邮件链接用作通用链接并启动 iOS 应用程序?
【问题讨论】:
【参考方案1】:我实际上已经为此开发了一个解决方法。
我们创建了一个应用程序,该应用程序具有允许用户通过生成魔术访问链接来登录的功能。用户将下载并安装应用程序,输入他们的电子邮件地址,服务器将向他们发送一封电子邮件,其中包含以下形式的链接:https://www.example.com/app/accesslink/tokenHere
我们创建了一个 AASA 文件并将其上传到我们的域 (www.example.com),例如 :) https://developer.apple.com/library/content/documentation/General/Conceptual/AppSearch/UniversalLinks.html
大多数用户可以很好地生成访问链接,点击它,应用程序就会加载。我们在应用程序上有处理程序来获取令牌并对其进行身份验证等。
当一些电子邮件提供商重写电子邮件中的访问链接时,问题就出现了。这尤其发生在安装了 URLblocker 的企业用户身上。
为了解决这个问题,我们在服务器上创建了一个重写规则,将 www.example.com/app/accesslink/anythingHerer 重写为服务器上名为“404accesslink.html”的静态文件(文件名是 arbetary ,在这种情况下,服务器是 asp.net IIS)。然后我们编辑了 '404accesslink.html' 如下以包含以下元:
<script>
document.writeln('<meta name="apple-itunes-app" content="app-id=APP_ID_HERE, app-argument=' + document.location.href + '">');
</script>
因为文件是通过重写提供的,所以 location.href 值与访问链接完全匹配。这欺骗了 iOS 打开应用程序并将路径传递给它。然后我们可以像往常一样在处理程序中提取它并验证用户。
我们写了一些简单的说明,以防打开应用程序不是自动的并且页面被显示(尽管在我们的测试中这没有发生)。
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
<script>
document.writeln('<meta name="apple-itunes-app" content="app-id=XXXXXXXXXX, app-argument=' + document.location.href + '">');
</script>
<style>
body
padding-top: 5%;
color: #FFF;
font-size: 1em;
font-family: Arial, Helvetica, sans-serif;
text-align: left;
background: #00338D;
margin: 50px;
h1
font-weight: normal;
font-size: 1.8em;
a
color: #FFF;
font-weight: bold;
text-decoration: none;
</style>
<title>XXXXXXXXX</title>
<body>
<h1>Please select 'Open' in the app banner displayed at the top of this page to open the app with your access link.</h1>
<p>If you do not see the app banner above then please close your browser and sign into the app using your email address and the password you used to register for the event.</p>
<p>If you do not know your password then you can <a href="https://XXXXXXXXXXXXX/account/mobileforgot/">reset it by following this link</a>.</p>
<p>Thank you,</p>
<p>XXXXXXXXXXXXX team</p>
</body>
</html>
如果在服务器端设置和渲染元数据可能会更好,而不是使用 JS 客户端,但它仍然有效。
在此之前: 如果任何系统重写/包装了应用程序链接,则该应用程序不会与新 URL 关联,并且当用户点击该 URL 时,它会在 Safari 中打开。
完成后: 如果任何系统重写/包装了应用程序链接,则该应用程序不会与新 URL 关联,并且当用户点击该 URL 时,它会在应用程序中打开。
【讨论】:
非常好的解决方案!但在我看来,在未安装应用程序的情况下,当带有重定向的链接(在您的情况下为 www.example.com/app/accesslink/anythingHerer)应该落入网站时,它将不起作用。如果我错了,请纠正我,我对 Web 开发的了解非常有限。 @ben-edge 这对您来说仍然可靠吗?在 ios 13 上测试,它只是偶尔工作。我已经测试了许多不同的设置,但似乎无法确定影响成功的因素。它可能失败了 8/10 次。 嗯,但该元标记应该显示带有“打开”按钮的 Apple 智能横幅。用户应该点击它来实际启动应用程序。【参考方案2】:通用链接基于正在打开的链接的实际 URL。这意味着如果您将链接包装在重定向中(如 MailChimp 所做的那样),通用链接将不起作用。
要解决此问题,您需要在 MailChimp 上disable click tracking。但是,如果每个应用(例如 Gmail)不支持通用链接,它可能仍然无法在每个应用中运行。
Branch.io(完全披露:我在 Branch 团队)一直在与一些较大的电子邮件平台合作以解决此问题并启用通用链接和点击跟踪,但到目前为止 MailChimp 还没有感兴趣的。随时让他们知道这是您希望看到的!
【讨论】:
Mailchimp 的支持建议禁用跟踪或在服务器端的帮助下处理重定向,方法是在您的服务器上提供“php(或 javascript)文件,该文件可以检测订阅者的用户代理并处理重定向将它们放入应用程序(如果已安装),或到相应的应用程序商店安装” 这实际上正是 Branch 所做的,信不信由你!【参考方案3】:重定向的深层链接现在可以在 iOS 上使用。 虚 url -> 深层链接重定向 -> 打开应用程序并停留在那里。
【讨论】:
您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center。 我可以确认 - 在近 5 年的重定向无法使用通用链接之后,这种行为似乎最近发生了变化。不清楚这是否仅适用于 iOS 15【参考方案4】:不,这是不可能的。
与关联链接一起使用的资源可以包括公共区域上的apple-app-site-association 文件。邮件黑猩猩没有。
https://developer.apple.com/library/content/documentation/General/Conceptual/AppSearch/UniversalLinks.html
添加对通用链接的支持很容易。三个步骤你 需要服用:
创建一个包含 JSON 数据的 apple-app-site-association 文件 关于您的应用可以处理的 URL。上传 apple-app-site-association 文件到您的 HTTPS Web 服务器。你可以 将文件放在服务器的根目录或 .well-known 子目录。准备您的应用以处理通用链接。
【讨论】:
以上是关于带有重定向的通用链接在 iOS 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章
iOS 通用链接在 react-native iOS 中不起作用