首页 > 解决方案 > iOS 12.1.2 branch.io 通用链接打开应用程序,但没有数据存在

问题描述

我正在尝试通过 branch.io 为 iOS 应用程序(Swift 4.2)实现深层链接。我已经完全按照分支文档中的说明集成了 iOS SDK。为了测试集成,我运行了 branch.io 通用链接验证脚本,它成功通过了。

通用链接不起作用的原因: 单击“笔记”或“消息”中的深层链接会打开应用程序,但不会传递任何数据。在查看调试日志时,Branch 会报告一个完全空白的 url ( 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 缓存和 cookie,但没有成功。

我还要提一下,深层链接本身应该没有问题。在 Android 上,相同的深层链接可以完美运行。

这两种方法都无法使用立即可用的深度链接数据打开应用程序。还有其他选择可以使这项工作吗?

更新:URI 和通用链接是单独的问题。我们通过仔细检查我们的 URI 方案(它不正确)使 URI 工作。对于通用链接,Branch 的 Swift 4.2 文档中可能存在轻微错误。请参阅我的答案以获取解决方案。

更新 2019-02-05:分支文档已针对 Swift 4.2 进行了更新。一切运行良好。

标签: iosdeep-linkingbranch.ioios-universal-linksswift4.2

解决方案


更新 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
}

推荐阅读