我正在尝试通过branch.io为iOS应用(Swift 4.2)实现深层链接。我已经完全按照分支文档中的概述集成了iOS SDK。为了测试集成,我运行了branch.io通用链接验证脚本,并成功通过了该脚本。
什么对通用链接不起作用:
单击“注释”或“消息”中的深层链接会打开应用程序,但不会传递任何数据。在查看调试日志时,Branch报告的网址为完全空白(example.app.link?%24identity_id=611647344982868361
而不是(example.app.link/hj86HlvvMk2?%24identity_id=611647344982868361
)。这与不使用深层链接手动打开应用程序相同。通过延迟的深层链接功能也无法获得任何数据。
使用URI方案代替通用链接: 如果我通过branch.io链接设置仪表板关闭了通用链接,则所有URL在浏览器中打开,而没有任何提示打开应用程序。但是,当我手动打开应用程序时,深度链接数据在启动时就可以使用(通过延迟链接功能)。
其他尝试:将$uri_redirect_mode: 2
添加到链接数据中以强制应用打开实际上并没有任何改变。唯一不同的是,对于URI方案,它在重定向到$fallback_url
之前在Safari中显示错误。我还尝试过重新安装应用程序,清除Safari缓存和cookie,但没有成功。
我还要提到,深层链接本身应该没有任何问题。在Android上,相同的深层链接可以正常工作。
这两种方法都无法使用立即可用的Deeplink数据打开应用程序。还有其他选择可以使这项工作吗?
更新:URI和通用链接是单独的问题。我们通过仔细检查URI方案来使URI正常工作(这是不正确的)。对于通用链接,Swift 4.2的Branch文档中可能会存在一些错误。请参阅我的答案以寻求解决方案。
更新2019-02-05 :分支文档已针对Swift 4.2进行了更新。一切都很好。
答案 0 :(得分:3)
更新2019-02-05:分支文档现在是Swift 4.2的最新版本。
原始答案:
好的,所以我们找到了解决通用链接无效的方法。我相信分支文档不是Swift 4.2的最新版本。在处理通用链接时,func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([Any]?) -> Void)
协议应将[UIUserActivityRestoring]
参数使用[Any]
而不是restorationHandler
。见下文:
当前分支机构文档(不起作用):
func application(_ application: UIApplication,
continue userActivity: NSUserActivity,
restorationHandler: @escaping ([Any]?) -> Void) -> Bool {
// handler for Universal Links
Branch.getInstance().continue(userActivity)
return true
}
上述功能还会在XCode中引发警告。自动修复它不起作用,它只会将其转换为私有功能,而不是正确的协议。
纠正(有效):
func application(_ application: UIApplication,
continue userActivity: NSUserActivity,
restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
// handler for Universal Links
Branch.getInstance().continue(userActivity)
return true
}
答案 1 :(得分:1)
这是来自Branch的Jackie。
您可以确保通过以下检查点吗?
如果您仍然看到链接数据未通过,请您将您正在使用的Branch应用ID和链接通过电子邮件发送至Integrations@branch.io,以便我们的团队进行深入研究?