Al implementar el enlace dinámico de Firebase en iOS, aparece un mensaje de error en la consola de depuración cuando hace clic en abrir enlace dinámico:

FIRAnalytics / ADVERTENCIA Implementación de la aplicación: continueUserActivity: restoreHandler: no encontrado. Agregue el controlador a su delegado de aplicaciones. Clase: LLAppDelegateProxy

Creo un proyecto minimizado para reproducir este problema. El nuevo proyecto solo contiene

Pod 'Localytics'
Pod 'Firebase/DynamicLinks’

Y el único código para agregar a 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
}

Parece que Firebase intenta llamar a application:continueUserActivity:restorationHandler: en Localytics 'LLAppDelegateProxy en lugar de AppDelegate.swift. También hay una publicación de problema de GitHub de Branch.io: https: // github.com/BranchMetrics/ios-branch-deep-linking/issues/485

La publicación afirma que hay un conflicto entre Google Analytics y Localytics y hace que Branch no pueda encontrar la función application:continueUserActivity:restorationHandler: en el lugar correcto.

Sigo su tercera sugerencia para cambiar el método 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)

Sin embargo, esto no me funciona. Sigo viendo la advertencia y el vínculo aún no se maneja.

¿Podría ayudarme a arreglar el método swizzling o tiene una mejor solución?]

1
Breek 15 dic. 2016 a las 20:41

2 respuestas

La mejor respuesta

Perdón por la respuesta tardía sobre este problema.

Nos comunicamos con Localytics y Firebase. Localytics nos ofreció una solución que requiere pasar de la integración automática a la integración manual. Aunque es un poco molesto usar la integración manual, resuelve el problema:]

0
Breek 13 mar. 2017 a las 16:23

Después de pasar un día casi completo, he resuelto el problema.

¡La siguiente solución funciona a la perfección!

Puede evitar que Firebase mezcle los métodos en su AppDelegate agregando FirebaseAppDelegateProxyEnabled configurado en NO en el info.plist de su aplicación

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

Salud

0
Chetan Dobariya 12 sep. 2018 a las 12:45