实施Localytics时,Firebase动态链接无法找到continueUserActivity

时间:2016-12-15 17:41:02

标签: swift swizzling firebase-dynamic-links localytics

在iOS上实施Firebase动态链接时,单击打开动态链接时,调试控制台中会显示一条错误消息:

  

FIRAnalytics / WARNING应用程序的实现:continueUserActivity:restorationHandler:未找到。请将处理程序添加到App Delegate中。类:LLAppDelegateProxy

我创建了一个最小化项目来重现此问题。新项目仅包含

Pod 'Localytics'
Pod 'Firebase/DynamicLinks’

唯一添加代码AppDelegate.swift

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    // Override point for customization after application launch.

    FIRApp.configure()
    Localytics.autoIntegrate("apikey", launchOptions: launchOptions)

    return true
}

func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool {
    let dynamicLink = FIRDynamicLinks.dynamicLinks()?.dynamicLink(fromCustomSchemeURL: url)
    if let dynamicLink = dynamicLink {
        print(dynamicLink.url)
        return true
    }

    return false
}

func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([Any]?) -> Void) -> Bool {
    guard let dynamicLinks = FIRDynamicLinks.dynamicLinks() else {
        return false
    }
    let handled = dynamicLinks.handleUniversalLink(userActivity.webpageURL!) { (dynamiclink, error) in
        print(dynamiclink?.url)
    }

    return handled
}

Firebase试图在Localytics'中调用application:continueUserActivity:restorationHandler:LLAppDelegateProxy代替AppDelegate.swift。 Branch.io还有一个GitHub问题帖子:https://github.com/BranchMetrics/ios-branch-deep-linking/issues/485

该帖子指出Google Analytics与Localytics之间存在冲突,导致Branch无法在正确的位置找到该功能application:continueUserActivity:restorationHandler:

我遵循他们的第三个建议来改变方法调整:

//Their solution in Objc

SwizzleInstanceSelectorWithNewSelector(
    [[UIApplication sharedApplication].delegate class], 
    @selector(application:continueUserActivity:restorationHandler:),
    [self class], 
    @selector(BRapplication:continueUserActivity:restorationHandler:)
);

//My swift version in AppDelegate.swift

let originalSelector = #selector(AppDelegate.application(_:continueUserActivity:restorationHandler:))
let swizzledSelector = #selector(AppDelegate.firApplication(_:continueUserActivity:restorationHandler:))

let originalMethod = class_getClassMethod(AppDelegate.self, originalSelector)
let swizzledMethod = class_getClassMethod(AppDelegate.self, swizzledSelector)

method_exchangeImplementations(originalMethod, swizzledMethod)

但是,这对我不起作用。我仍然看到警告和链接仍未处理。

你能帮我解决方法调整问题,或者你有更好的解决方案:]

2 个答案:

答案 0 :(得分:0)

对于有关此问题的迟到答复感到抱歉。

我们联系了Localytics和Firebase。 Localytics为我们提供了一个解决方案,需要从自动集成切换到手动集成。虽然使用手动集成有点烦人,但它解决了这个问题:]

答案 1 :(得分:0)

花了将近一整天的时间,我发现了问题所在。

下面的解决方案就像魅力一样!

您可以通过在应用程序的 {}中添加设置为 FirebaseAppDelegateProxyEnabled NO 来阻止Firebase混淆AppDelegate中的方法。 1}}

https://docs.localytics.com/dev/ios.html#integrating-with-firebase

欢呼