草庐IT

ios - 附加到现有链接时缺少 Branch.io 参数

coder 2023-09-24 原文

我正在努力让用户点击表单中的 Branch.io 链接 https://a.test-app.link/identifier?foo=bar 然后被重定向到 AppStore 以下载应用程序。然后应用程序应该能够在启动期间获取 foo 参数。

为了调试这个,我遵循了这个过程:

  1. 在测试环境下创建链接。
  2. 点击设备上的链接。
  3. 使用 Xcode 安装应用。
  4. 启动应用程序并在启动期间读取参数

    let branch = Branch.getTestInstance()
    branch.setDebug()
    branch.initSessionWithLaunchOptions(launchOptions, andRegisterDeepLinkHandler: { params, error in
        if error == nil {
            // params are the deep linked params associated with the link that the user clicked -> was re-directed to this app
            // params will be empty if no data found
            print(params)
        }
    })
    

我还在 info.plist 文件中设置了正确的 API token 。

据我所知,我现在应该在 params 字典中获取我的 foo 参数,但这并没有发生。使参数起作用的唯一方法是使用仪表板添加静态参数。此外,我什至在已经从仪表板中删除的 params 字典中获取旧参数,但没有 URL 查询参数的迹象。

有人知道我做错了什么吗?

谢谢

最佳答案

我们有一个更新和一个可能的原因,结果比预期的要有趣得多!

TL;DR:将链接数据作为查询字符串参数传递适用于 app.link test-app。链接。这些症状背后的真正原因是其他原因,但普通用户永远不会遇到。

症状

附加到现有 Branch 链接的链接参数(例如:https://bnpo.app.link/identifier?foo=bar)不会可靠地显示在应用程序中。

原因

事实证明,在某些时候,Apple 更改了移动版 Safari 的行为,因此当您输入一个 URL 也在您的历史记录中时,Safari 实际上会在您键入时预加载页面。对于 Branch 服务器,这看起来与常规访问完全相同,因此我们为这些“访问”中的每一次创 build 备指纹。您实际上可以通过转到 Link Clicks 来查看实际效果。在 Branch 仪表板上的页面,将您之前访问过的 Branch 的 URL 输入到 Safari 地址栏中,然后观察所有链接的“点击”。

问题是 Branch SDK 按从旧到新的顺序使用设备指纹。如果您之前在测试时访问过 https://bnpo.app.link/identifier,然后重新输入带有附加查询参数的 URL (https://bnpo.app. link/identifier?foo=bar), Safari 已经加载了 https://bnpo.app.link/identifier 在你甚至有机会输入 ?foo= 之前栏.

这意味着您的设备现在有两个不同的指纹:

  1. 一个用于https://bnpo.app.link/identifier
  2. 另一个用于 https://bnpo.app.link/identifier?foo=bar

即使您按 Go 触发应用程序的启动,URL https://bnpo.app.link/identifier?foo=bar,指纹https://bnpo.app.link/identifier 已经存在,并且首先在应用程序中使用,因为它较旧(一两秒,具体取决于您键入的速度)。

如果您随后退出该应用并立即再次启动它,您将获得带有额外参数的下一个指纹。

解决方案

这种情况在测试期间很容易出现,但现实生活中的用户几乎永远不会遇到。它仅在手动输入已访问过的 URL,然后向其附加其他查询参数时发生。

出于测试目的,只需反复重新启动您的应用程序,直到您在启动期间从 Branch init() 调用中获取不到任何数据 (+clicked_branch_link: 0)(用完任何突出的指纹),然后...

  1. 使用 Notes 完整输入您的 URL 并将其粘贴到 Safari
  2. 只需从 Notes 中打开 URL

我们将在我们的文档中添加一条总结上述内容的警示说明。感谢您提请我们注意!

关于ios - 附加到现有链接时缺少 Branch.io 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37310925/

有关ios - 附加到现有链接时缺少 Branch.io 参数的更多相关文章

  1. ruby-on-rails - 如何在 ruby​​ 中使用两个参数异步运行 exe? - 2

    exe应该在我打开页面时运行。异步进程需要运行。有什么方法可以在ruby​​中使用两个参数异步运行exe吗?我已经尝试过ruby​​命令-system()、exec()但它正在等待过程完成。我需要用参数启动exe,无需等待进程完成是否有任何ruby​​gems会支持我的问题? 最佳答案 您可以使用Process.spawn和Process.wait2:pid=Process.spawn'your.exe','--option'#Later...pid,status=Process.wait2pid您的程序将作为解释器的子进程执行。除

  2. ruby - RSpec - 使用测试替身作为 block 参数 - 2

    我有一些Ruby代码,如下所示:Something.createdo|x|x.foo=barend我想编写一个测试,它使用double代替block参数x,这样我就可以调用:x_double.should_receive(:foo).with("whatever").这可能吗? 最佳答案 specify'something'dox=doublex.should_receive(:foo=).with("whatever")Something.should_receive(:create).and_yield(x)#callthere

  3. ruby - 如何在 Ruby 中拆分参数字符串 Bash 样式? - 2

    我正在为一个项目制作一个简单的shell,我希望像在Bash中一样解析参数字符串。foobar"helloworld"fooz应该变成:["foo","bar","helloworld","fooz"]等等。到目前为止,我一直在使用CSV::parse_line,将列分隔符设置为""和.compact输出。问题是我现在必须选择是要支持单引号还是双引号。CSV不支持超过一个分隔符。Python有一个名为shlex的模块:>>>shlex.split("Test'helloworld'foo")['Test','helloworld','foo']>>>shlex.split('Test"

  4. ruby - 检查方法参数的类型 - 2

    我不确定传递给方法的对象的类型是否正确。我可能会将一个字符串传递给一个只能处理整数的函数。某种运行时保证怎么样?我看不到比以下更好的选择:defsomeFixNumMangler(input)raise"wrongtype:integerrequired"unlessinput.class==FixNumother_stuffend有更好的选择吗? 最佳答案 使用Kernel#Integer在使用之前转换输入的方法。当无法以任何合理的方式将输入转换为整数时,它将引发ArgumentError。defmy_method(number)

  5. ruby-on-rails - 在默认方法参数中使用 .reverse_merge 或 .merge - 2

    两者都可以defsetup(options={})options.reverse_merge:size=>25,:velocity=>10end和defsetup(options={}){:size=>25,:velocity=>10}.merge(options)end在方法的参数中分配默认值。问题是:哪个更好?您更愿意使用哪一个?在性能、代码可读性或其他方面有什么不同吗?编辑:我无意中添加了bang(!)...并不是要询问nobang方法与bang方法之间的区别 最佳答案 我倾向于使用reverse_merge方法:option

  6. ruby - 定义方法参数的条件 - 2

    我有一个只接受一个参数的方法:defmy_method(number)end如果使用number调用方法,我该如何引发错误??通常,我如何定义方法参数的条件?比如我想在调用的时候报错:my_method(1) 最佳答案 您可以添加guard在函数的开头,如果参数无效则引发异常。例如:defmy_method(number)failArgumentError,"Inputshouldbegreaterthanorequalto2"ifnumbereputse.messageend#=>Inputshouldbegreaterthano

  7. 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返回它复制的字节数,但是当我还没有下

  8. ruby-on-rails - Ruby url 到 html 链接转换 - 2

    我正在使用Rails构建一个简单的聊天应用程序。当用户输入url时,我希望将其输出为html链接(即“url”)。我想知道在Ruby中是否有任何库或众所周知的方法可以做到这一点。如果没有,我有一些不错的正则表达式示例代码可以使用... 最佳答案 查看auto_linkRails提供的辅助方法。这会将所有URL和电子邮件地址变成可点击的链接(htmlanchor标记)。这是文档中的代码示例。auto_link("Gotohttp://www.rubyonrails.organdsayhellotodavid@loudthinking.

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

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

  10. ruby - rails 3 redirect_to 将参数传递给命名路由 - 2

    我没有找到太多关于如何执行此操作的信息,尽管有很多关于如何使用像这样的redirect_to将参数传递给重定向的建议:action=>'something',:controller=>'something'在我的应用程序中,我在路由文件中有以下内容match'profile'=>'User#show'我的表演Action是这样的defshow@user=User.find(params[:user])@title=@user.first_nameend重定向发生在同一个用户Controller中,就像这样defregister@title="Registration"@user=Use

随机推荐