При реализации 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 или у вас есть лучшее решение:]