3

情况是这样的:如果我单击具有与之关联的自定义键/值的链接之一,我的回调initSessionWithLaunchOptions:andRegisterDeepLinkHandler将被触发,但“参数”仅在应用程序新鲜的情况下包含自定义键/值从链接打开。如果应用程序已经在后台运行并且我单击链接,则会调用回调但不存在任何参数。这在几周前有效,现在似乎停止工作。我也尝试升级到 iOS SDK 0.12.1,但还没有成功。

作为一种解决方法,我正在尝试在Branch.getInstance().getLatestReferringParams()应用程序激活后进行延迟调用序列,有时我会从那里获取参数,但这不是确定性的,有时需要 2 秒,有时需要 10 秒,有时永远不会。@AlexBauer 这是应用程序委托的部分。顺便说一句,我在应用程序中没有 facebook 集成:

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {

    let branch: Branch = Branch.getInstance()
    branch.initSessionWithLaunchOptions(launchOptions, andRegisterDeepLinkHandler: { params, error in
        if (error == nil) {
            print(params)
            self.tryInviteFlow(params)
        } else {
            print(error.localizedDescription)
        }
    })
}

func application(application: UIApplication, continueUserActivity userActivity: NSUserActivity, restorationHandler: ([AnyObject]?) -> Void) -> Bool {
    // pass the url to the handle deep link call
    return Branch.getInstance().continueUserActivity(userActivity);
}
4

1 回答 1

2

这是一个快速故障排除入门,用于解决分支链接从冷启动开始正常工作但应用程序在后台后变为活动状态时无法正常工作的问题......

从分支链接打开应用程序时:

  • 如果应用程序正在冷启动(即它不在后台),则入口点是 didFinishLaunchingWithOptions
  • 如果应用程序在后台并通过通用链接打开(如果设备运行 iOS 9.2+,则会出现这种情况),入口点将是 continueUserActivity 函数
  • 如果应用程序是通过 URI 方案打开的(如果设备运行的是 iOS 9 之前的版本,可能是 iOS 9 到 9.2 的版本),入口点将是 openURL 函数

插入到 openURL 和 continueUserActivity 函数中的分支代码也调用了在 didFinishLaunchingWithOptions 中定义的相同分支初始化回调:

  • 在 openURL 中是:Branch.getInstance().handleDeepLink(url);
  • 在 continueUserActivity 这是: Branch.getInstance().continue(userActivity)

如果不调用这些 Branch 函数,则在恢复应用时不会调用接收链接参数的 Branch init 回调,因此链接参数将不可用。

即使调用了这些函数,openURL 和 continueUserActivity 函数中的其他代码也可能会阻止访问分支代码。如果这些代码路径中有其他代码,请通过在分支函数或 init 回调中的一行代码上设置断点进行测试,验证是否确实调用了相应的分支函数。

另一种可能导致热启动问题而不是冷启动问题的潜在情况是,读取分支参数的代码在分支初始化回调之外且在该回调完成之前被调用。如果应用程序在 didFinishLaunchingWithOptions 中足够忙,则 init 回调可能会延迟足够长的时间,以至于 init 回调在检查参数之前完成。稍后,当应用程序恢复时,应用程序中可能会发生较少的事件,并且可能会在 init 回调完成之前检查参数的代码。这不是一种可能的情况,但它可能会发生。

为避免这种“竞争条件”类型的情况,仅在 init 回调中或在收到已配置为指示 init 回调完成的通知后检查分支链接参数(您可以在此查看使用通知的示例SDK 中包含的 TestBed-Swift 项目中的方式,此处:https ://github.com/BranchMetrics/ios-branch-deep-linking/tree/master/Branch-TestBed-Swift )。

于 2017-02-17T19:22:56.870 回答