当从链接

时间:2017-09-28 18:35:30

标签: ios swift facebook deep-linking branch.io

我们正在使用Branch在我们的iOS应用中实现深层链接。现在如果我运行应用程序,然后尝试通过分支链接打开它,branch.initSession被调用,我可以访问深层链接数据。但是,如果我尝试在未启动应用时直接打开分支链接,则andRegisterDeepLinkHandler的{​​{1}}回调不会被执行 - 这基本上会使深层链接无效。

我们的branch.initSession代码:

AppDelegate

1 个答案:

答案 0 :(得分:4)

我们已经能够通过以下方式解决这个问题。问题是我们application(_:,didFinishLaunchingWithOptions:)AppDelegate的返回值。我们已经通过facebook将返回值的生成委托给SDKApplicationDelegate.shared。似乎branch.initSession要求application(_:,didFinishLaunchingWithOptions:)返回true,而有问题的SDKApplicationDelegate.shared则返回false。

这是记录在案的,但在文档中很难找到它,特别是如果你不知道这个问题是由于使用branch和facebook SDK引起的。

documentation screenshot

因此,修复程序是更新application(_:,didFinishLaunchingWithOptions:)实现:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    let branch: Branch = Branch.getInstance()
    branch.initSession(launchOptions: 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
        // TODO: ... insert custom logic here ...
        print("params: %@", params as? [String: AnyObject] ?? {})
        }
        })
    ...

    // facebook SDK login integration
    SDKApplicationDelegate.shared.application(application, didFinishLaunchingWithOptions: launchOptions)

    // always return true!
    return true
}

这一切都源于我在整合Facebook时追随this question的答案。我已经在其中添加了一个answer,因此其他人也不会因此而陷入困境。

希望这可以节省几个小时。