iOS 12.1.2 branch.io 通用链接打开应用程序,但没有数据存在

iOS 12.1.2 branch.io Universal Links open app, but no data is present

我正在尝试通过 branch.io 为 iOS 应用程序 (Swift 4.2) 实施 deep-links。我已经完全按照 b运行ch 文档中的概述集成了 iOS SDK。为了测试集成,我 运行 branch.io 通用 link 验证脚本成功通过。

什么不适用于通用链接: 单击 'Notes' 或 'Messages' 中的 deeplink 确实会打开应用程序,但不会传递任何数据。在查看调试日志时,B运行ch 报告完全空白的 url (example.app.link?%24identity_id=611647344982868361) 而不是 (example.app.link/hj86HlvvMk2?%24identity_id=611647344982868361)。这与在没有 deeplink 的情况下手动打开应用程序是一样的。也无法通过延迟的深度 link 功能获得任何数据。

使用 URI 方案而不是通用链接: 如果我通过 branch.io link 设置仪表板关闭通用链接,则所有 url 都会在浏览器中打开,而不会提示打开应用程序。但是,当我手动打开应用程序时,deeplink 数据在启动时可用(通过延迟的 link 功能)。

其他尝试:$uri_redirect_mode: 2 添加到 link 数据以强制打开应用程序并没有真正改变任何东西。唯一不同的是,对于 URI 方案,它会在重定向到 $fallback_url 之前在 Safari 中显示错误。我也尝试重新安装应用程序,清除 Safari 缓存和 cookie,但没有成功。

我还要提一下,deeplinks 本身应该没有问题。在 Android 上,相同的深度 link 完美运行。

这两种方法都无法打开具有立即可用的深度link 数据的应用程序。是否有任何其他选项可以使这项工作正常进行?

更新:URI 和通用 links 是不同的问题。我们通过仔细检查我们的 URI 方案(这是不正确的)来让 URI 工作。对于通用 links,B运行ch 的 Swift 4.2 文档中可能存在轻微错误。请参阅我的答案以获取解决方案。

更新 2019-02-05:B运行ch 文档已针对 Swift 4.2 更新。一切正常。

这里是 Branch 的 Jackie。

你能确定通过以下检查点吗?

如果您继续看到 link 数据未通过,请将您正在使用的 Branch 应用程序 ID link(s) 通过电子邮件发送至 integrations@branch.io,以便我们的团队可以深入探讨一下吗?

更新 2019-02-05: 分支文档现在是 Swift 4.2 的最新版本。


原始答案:

好的,我们找到了通用链接不起作用的解决方案。我相信 Branch 文档不是 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
}