带有重定向的通用链接在 iOS 中不起作用

Universal links with redirects not working in iOS

公司域 link 最终出现在 iOS 应用程序中。通过 MailChimp 从电子邮件网站重定向到公司网站的链接最终出现在 iOS 应用程序中。

但是 link 通过 MailChimp 跟踪重定向到公司域网站的 link 在邮件应用程序(Mail、Gmail 等)中点击的邮件最终出现在公司网站的 Safari 中。

是否有任何解决方法可以使 MailChimp 电子邮件 links 与重定向一起工作作为通用 links 并启动 iOS 应用程序?

不,不可能。

与关联链接一起使用的资源可以包含 public 区域的 apple-app-site-association 文件。邮件黑猩猩没有。

https://developer.apple.com/library/content/documentation/General/Conceptual/AppSearch/UniversalLinks.html

Adding support for universal links is easy. There are three steps you need to take:

Create an apple-app-site-association file that contains JSON data about the URLs that your app can handle. Upload the apple-app-site-association file to your HTTPS web server. You can place the file at the root of your server or in the .well-known subdirectory. Prepare your app to handle universal links.

通用链接基于打开的 link 的实际 URL。这意味着,如果您将 link 包装在重定向中(如 MailChimp 所做的那样),通用链接将不起作用。

要解决此问题,您需要 disable click tracking 在 MailChimp 上。但是,如果该应用程序不支持通用链接,它可能仍然无法在每个应用程序(例如 Gmail)中运行。

Branch.io(完全披露:我在 Branch 团队)一直在与一些较大的电子邮件平台合作解决此问题并启用通用链接和点击跟踪,但直到现在MailChimp 一直不感兴趣。随时让他们知道这是您想看到的!

我实际上已经为此开发了一个解决方法。

我们创建了一个应用程序,该应用程序具有允许用户通过生成魔法访问权限登录的功能 link。用户将下载并安装该应用程序,输入他们的电子邮件地址,服务器将向他们发送一封包含 link 的电子邮件,格式为:https://www.example.com/app/accesslink/{{tokenHere}}

例如,我们创建了一个 AASA 文件并将其上传到我们的域 (www.example.com):) https://developer.apple.com/library/content/documentation/General/Conceptual/AppSearch/UniversalLinks.html

大多数用户都可以生成访问权限 link 没问题,点击它,应用程序就会加载。我们在应用程序上有处理程序来获取令牌并对其进行身份验证等。

当某些电子邮件提供商重写电子邮件中的访问权限 link 时,问题就出现了。这尤其发生在安装了 URL 拦截器的公司用户身上。

为了解决这个问题,我们在服务器上创建了一个重写规则,以将 www.example.com/app/accesslink/{{anythingHerer}} 重写为服务器上名为 '404accesslink.html 的静态文件'(文件名是任意的,在这种情况下服务器是 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 值与访问权限 link 完全匹配。这诱使 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 客户端,但它的工作 none 更少。

在此之前: 如果任何系统 rewrote/wrapped 应用程序 link 应用程序未与新的 URL 关联,并且当用户点击 URL 它在 Safari 中打开。

完成后: 如果任何系统 rewrote/wrapped 应用程序 link 应用程序未与新的 URL 相关联,并且当用户点击 URL 它在应用程序中打开时。

重定向的深层链接现在适用于 iOS。 虚荣 url -> 深层链接重定向 -> 打开应用程序并停留在那里。