jjzjj

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

coder 2023-09-22 原文

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

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

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

最佳答案

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

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

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

大多数用户都可以生成一个访问链接,点击它,应用程序就会加载。我们在应用程序上有处理程序来获取 token 并对其进行身份验证等。

当一些电子邮件提供商重写了电子邮件中的访问链接时,问题就出现了。这尤其发生在安装了 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 值与访问链接完全匹配。这诱使 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 时,它会在应用程序中打开。

关于ios - 带有重定向的通用链接在 iOS 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42771726/

有关ios - 带有重定向的通用链接在 iOS 中不起作用的更多相关文章

  1. ruby-on-rails - 如果 Object::try 被发送到一个 nil 对象,为什么它会起作用? - 2

    如果您尝试在Ruby中的nil对象上调用方法,则会出现NoMethodError异常并显示消息:"undefinedmethod‘...’fornil:NilClass"然而,有一个tryRails中的方法,如果它被发送到一个nil对象,它只返回nil:require'rubygems'require'active_support/all'nil.try(:nonexisting_method)#noNoMethodErrorexceptionanymore那么try如何在内部工作以防止该异常? 最佳答案 像Ruby中的所有其他对象

  2. ruby-on-rails - s3_direct_upload 在生产服务器中不工作 - 2

    在Rails4.0.2中,我使用s3_direct_upload和aws-sdkgems直接为s3存储桶上传文件。在开发环境中它工作正常,但在生产环境中它会抛出如下错误,ActionView::Template::Error(noimplicitconversionofnilintoString)在View中,create_cv_url,:id=>"s3_uploader",:key=>"cv_uploads/{unique_id}/${filename}",:key_starts_with=>"cv_uploads/",:callback_param=>"cv[direct_uplo

  3. ruby - 如何验证 IO.copy_stream 是否成功 - 2

    这里有一个很好的答案解释了如何在Ruby中下载文件而不将其加载到内存中:https://stackoverflow.com/a/29743394/4852737require'open-uri'download=open('http://example.com/image.png')IO.copy_stream(download,'~/image.png')我如何验证下载文件的IO.copy_stream调用是否真的成功——这意味着下载的文件与我打算下载的文件完全相同,而不是下载一半的损坏文件?documentation说IO.copy_stream返回它复制的字节数,但是当我还没有下

  4. Ruby 文件 IO 定界符? - 2

    我正在尝试解析一个文本文件,该文件每行包含可变数量的单词和数字,如下所示:foo4.500bar3.001.33foobar如何读取由空格而不是换行符分隔的文件?有什么方法可以设置File("file.txt").foreach方法以使用空格而不是换行符作为分隔符? 最佳答案 接受的答案将slurp文件,这可能是大文本文件的问题。更好的解决方案是IO.foreach.它是惯用的,将按字符流式传输文件:File.foreach(filename,""){|string|putsstring}包含“thisisanexample”结果的

  5. ruby - 将 spawn() 的标准输出/标准错误重定向到 Ruby 中的字符串 - 2

    我想使用spawn(针对多个并发子进程)在Ruby中执行一个外部进程,并将标准输出或标准错误收集到一个字符串中,其方式类似于使用Python的子进程Popen.communicate()可以完成的操作。我尝试将:out/:err重定向到一个新的StringIO对象,但这会生成一个ArgumentError,并且临时重新定义$stdxxx会混淆子进程的输出。 最佳答案 如果你不喜欢popen,这是我的方法:r,w=IO.pipepid=Process.spawn(command,:out=>w,:err=>[:child,:out])

  6. Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting - 2

    1.错误信息:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:requestcanceledwhilewaitingforconnection(Client.Timeoutexceededwhileawaitingheaders)或者:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:TLShandshaketimeout2.报错原因:docker使用的镜像网址默认为国外,下载容易超时,需要修改成国内镜像地址(首先阿里

  7. ruby-on-rails - 带有 Zeus 的 RSpec 3.1,我应该在 spec_helper 中要求 'rspec/rails' 吗? - 2

    使用rspec-rails3.0+,测试设置分为spec_helper和rails_helper我注意到生成的spec_helper不需要'rspec/rails'。这会导致zeus崩溃:spec_helper.rb:5:in`':undefinedmethod`configure'forRSpec:Module(NoMethodError)对thisissue最常见的回应是需要'rspec/rails'。但这是否会破坏仅使用spec_helper拆分rails规范和PORO规范的全部目的?或者这无关紧要,因为Zeus无论如何都会预加载Rails?我应该在我的spec_helper中做

  8. Ruby:如何使用带有散列的 'send' 方法调用方法? - 2

    假设我有一个类A,里面有一些方法。假设stringmethodName是这些方法之一,我已经知道我想给它什么参数。它们在散列中{'param1'=>value1,'param2'=>value2}所以我有:params={'param1'=>value1,'param2'=>value2}a=A.new()a.send(methodName,value1,value2)#callmethodnamewithbothparams我希望能够通过传递我的哈希以某种方式调用该方法。这可能吗? 最佳答案 确保methodName是一个符号,而

  9. ruby-on-rails - 带有 Pry 的 Rails 控制台 - 2

    当我进入Rails控制台时,我已将pry设置为加载代替irb。我找不到该页面或不记得如何将其恢复为默认行为,因为它似乎干扰了我的Rubymine调试器。有什么建议吗? 最佳答案 我刚发现问题,pry-railsgem。忘记了它的目的是让“railsconsole”打开pry。 关于ruby-on-rails-带有Pry的Rails控制台,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/question

  10. ruby-on-rails - "assigns"在 Ruby on Rails 中有什么作用? - 2

    我目前正在尝试学习RubyonRails和测试框架RSpec。assigns在此RSpec测试中做什么?describe"GETindex"doit"assignsallmymodelas@mymodel"domymodel=Factory(:mymodel)get:indexassigns(:mymodels).shouldeq([mymodel])endend 最佳答案 assigns只是检查您在Controller中设置的实例变量的值。这里检查@mymodels。 关于ruby-o

随机推荐