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。
你能确定通过以下检查点吗?
- 分支键和 URI 方案已添加到 Info.plist (https://docs.branch.io/pages/apps/ios/#configure-infoplist)
- 在 didFinishLaunching (https://docs.branch.io/pages/apps/ios/#initialize-branch) 中调用了 initSession
- 正在正确调用 openUrl 和 continueUserActivity (https://docs.branch.io/pages/apps/ios/#initialize-branch)
- 无网络接口修改(https://github.com/BranchMetrics/ios-branch-deep-linking/blob/master/Branch.framework/Versions/A/Headers/BNCNetworkServiceProtocol.h)
- 确保没有第 3 方触发 Branch 事件,在关闭之前或之后消耗点击 (https://dashboard.branch.io/liveview/events)
如果您继续看到 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
}
我正在尝试通过 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。
你能确定通过以下检查点吗?
- 分支键和 URI 方案已添加到 Info.plist (https://docs.branch.io/pages/apps/ios/#configure-infoplist)
- 在 didFinishLaunching (https://docs.branch.io/pages/apps/ios/#initialize-branch) 中调用了 initSession
- 正在正确调用 openUrl 和 continueUserActivity (https://docs.branch.io/pages/apps/ios/#initialize-branch)
- 无网络接口修改(https://github.com/BranchMetrics/ios-branch-deep-linking/blob/master/Branch.framework/Versions/A/Headers/BNCNetworkServiceProtocol.h)
- 确保没有第 3 方触发 Branch 事件,在关闭之前或之后消耗点击 (https://dashboard.branch.io/liveview/events)
如果您继续看到 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
}