没有使用适当的元数据调用Branch.io深层链接处理程序

时间:2016-05-22 22:44:08

标签: ios branch.io deeplink

这种情况是:如果我点击其中一个链接与自定义键/值关联,我的initSessionWithLaunchOptions:andRegisterDeepLinkHandler回调被触发正常,但'params'只包含自定义键/应用程序从链接中重新打开的情况下的值。如果应用程序已经在后台运行并且我单击该链接,则会调用回调但不存在任何参数。几周前这种情况正在发挥作用,现在似乎停止了工作。我也尝试升级到iOS SDK 0.12.1但没有运气。

作为一种解决方法,我正在尝试在应用程序变为活动状态后对Branch.getInstance().getLatestReferringParams()执行延迟的调用序列,有时我从那里获取参数,但这不是确定性的,有时需要2秒,有时10秒,有时从不。 @AlexBauer这是app委托的部分内容。顺便说一句,我在应用程序中没有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);
}

1 个答案:

答案 0 :(得分:1)

这是一个快速的故障排除初级版,用于解决分支链接从冷启动开始正常工作的问题,但在应用程序在后台运行后变为活动状态时却没有...

从分支链接打开应用时:

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

在didFinishLaunchingWithOptions中定义的相同Branch init回调也由插入openURL和continueUserActivity函数的Branch代码调用:

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

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

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

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

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