我正在努力让用户点击表单中的Branch.io链接
https://a.test-app.link/identifier?foo=bar
然后被重定向到AppStore下载应用程序。然后,应用应该能够在启动期间获取foo
参数。
为了调试这个,我遵循了这个程序:
启动应用程序并在启动期间使用
读取参数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令牌。
根据我的理解,我现在应该在foo
字典中获取params
参数,但这不会发生。获取参数的唯一方法是使用仪表板添加静态参数。此外,我甚至在我已从仪表板中删除的params
字典中获取旧参数,但没有URL查询参数的迹象。
有没有人知道我做错了什么?
由于
答案 0 :(得分:6)
我们有更新和可能的原因,这最终比预期更有趣!
TL; DR:传递链接数据作为查询字符串参数适用于app.link
和 test-app.link
。这些症状背后的真正原因是其他原因,但普通用户永远不会遇到。
将附加到现有分支链接的链接参数(例如:https://bnpo.app.link/identifier?foo=bar)无法可靠地显示在应用内。
事实证明,在某些时候,Apple改变了移动Safari的行为,因此当您输入历史中的URL 时,Safari实际上会在您键入时预加载页面。对于分支服务器,这看起来与常规访问完全相同,因此我们为这些“访问”中的每一个创建设备指纹。实际上,您可以通过转到分支仪表板上的Link Clicks页面,在之前输入您已访问过的分支的URL进入Safari地址栏,然后观看所有内容来查看此操作链接“点击”滚动。
问题是Branch SDK依次从最旧到最新消耗设备指纹。如果您之前在测试时访问了https://bnpo.app.link/identifier
,然后使用附加的查询参数(https://bnpo.app.link/identifier?foo=bar
)重新输入该网址,那么在您有机会输入之前,Safari已经加载了https://bnpo.app.link/identifier
在?foo=bar
。
这意味着您的设备现在有两种不同的指纹:
https://bnpo.app.link/identifier
https://bnpo.app.link/identifier?foo=bar
即使您按开始触发使用网址https://bnpo.app.link/identifier?foo=bar
启动应用,https://bnpo.app.link/identifier
的指纹已经存在,并且已在应用中首先使用,因为它是一个较旧的(一两秒钟,取决于你输入的速度)。
如果您随后退出应用并立即再次启动它,您将获得带有额外参数的下一个指纹。
这种情况在测试期间相当容易出现,但现实生活中的用户几乎永远不会遇到。只有在手动键入已访问过的URL,然后向其附加其他查询参数时才会出现这种情况。
出于测试目的,只需重复重新启动您的应用,直到您在启动过程中从分支+clicked_branch_link: 0
调用中没有数据(init()
)(用完任何未完成的指纹),然后......
我们将在文档中添加一条警告性说明,总结上述内容。感谢您引起我们的注意!
答案 1 :(得分:2)
编辑:此答案已过期。请参阅this answer了解确定问题的真正原因。
来自Branch.io的Alex:您所描述的不是预期的功能,我可以在我的终端验证这在Test App配置中无法正常工作。我会将这个错误传递给我们的工程师!
与此同时,似乎将查询参数附加到 live 键链接仍然可以正常工作。因此,如果您执行https://bnpo.app.link/identifier?foo=bar,foo:bar
将会通过。
很抱歉给您带来不便!