2016-12-15 2 views
1

При реализации Firebase динамической ссылки на прошивкой, появляется сообщение об ошибке в консоли отладки при нажатии открытой динамической связи:Firebase Dynamic Link не может найти continueUserActivity когда Localytics реализован

FIRAnalytics/ПРЕДУПРЕЖДЕНИЕ Внедрение приложения : continueUserActivity: restoreHandler: не найден. Добавьте обработчик в свой делегат приложения. Класс: 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 пытается вызвать application:continueUserActivity:restorationHandler: в Localytics' LLAppDelegateProxy вместо AppDelegate.swift. Также есть сообщение о выпуске GitHub от Branch.io: https://github.com/BranchMetrics/ios-branch-deep-linking/issues/485

В сообщении говорится, что существует конфликт между Google Analytics и Localitics и причиной того, что Branch не сможет найти функцию application:continueUserActivity:restorationHandler: в нужном месте.

Я следую их третье предложение изменить метод swizzling:

//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) 

Однако, это не работает для меня. Я все еще вижу предупреждение, и ссылка все еще не обрабатывается.

Не могли бы вы помочь мне исправить метод swizzling или у вас есть лучшее решение:]

ответ

0

Извините за поздний ответ об этой проблеме.

Мы потянулись как к местным специалистам, так и к Firebase. Localytics предложила нам решение, которое требует перехода от автоматической интеграции к ручной интеграции. Хотя это немного раздражает использование ручной интеграции, но оно решает проблему:]

Смежные вопросы