Firebase pendiente de enlaces dynamics que no funcionan

De acuerdo con la documentation de Firebase Dynamic Links, incluso si la aplicación no está instalada, si el usuario abre el enlace en el dispositivo, la página de la aplicación en Appstore se abrió y una vez que la aplicación se instaló, la aplicación maneja el enlace en el primer lanzamiento. Después de un poco de investigación sobre cómo esto se maneja, descubrí que Firebase tiene algo llamado "enlaces dynamics pendientes", y se espera que se llame al método AppDelegate con estos enlaces:

- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey, id> *)options 

La fuente de esta suposition: https://groups.google.com/forum/#!msg/firebase-talk/2STD8eIi61I/8KJqZN7TBAAJ

Pero cuando trato de probar esta característica de "Lynx dynamic pendiente", ninguno de estos dos methods de AppDelegate se ha llamado

 -(BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restrationHandler:(void (^)(NSArray *))restrationHandler -(BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey, id> *)options 

Al mismo time, si la aplicación está instalada, los enlaces dynamics funcionan como se espera, abriéndose a través del método openURL: si se abre desde la aplicación de gmail a través de Chrome, a través de enlaces Universal en iOS9 y luego si se abre desde la aplicación Notes o Mail.

Entonces, mi pregunta es: ¿Cómo esperan que funcionen los "enlaces dynamics pendientes"? ¿Cuál podría ser la razón por la que mi aplicación no los maneja?

—————-EDITAR—————-

El problema era que, por defecto, Firebase intenta abrir la aplicación con un esquema de URL que es igual a la ID del package de la aplicación, que no era mi caso. He cambiado mi configuration de Firebase a la siguiente:

 NSString *filePath = [[NSBundle mainBundle] pathForResource:@"GoogleService-Info" ofType:@"plist"]; FIROptions *options = [[FIROptions alloc] initWithContentsOfFile:filePath]; options.deepLinkURLScheme = @"MY-CUSTOM-SCHEME"; [FIRApp configureWithOptions:options]; 

Y comienza a funcionar, por ejemplo, openURL: se llama al método ahora en la primera aplicación abierta si se abrió el enlace en el dispositivo antes.

La vinculación profunda posterior a la installation se basa en la comprobación de una bandera:

  • [FIRApp configure] llamado
  • Dynamic Links SDK comtesting si se trata de una installation nueva (por ejemplo, no hay ninguna bandera presente)
  • Si es así, llama a la API de Dynamic Links para comprobar si hay un enlace dynamic para resolver
  • En caso afirmativo, el SDK llama [[UIApplication shanetworkingApplication] openURL:url]; utilizando el esquema de URL personalizado configurado manualmente en FIROptions o el ID de package en minúsculas (por ejemplo, com.foo.bar).

Si no está recibiendo, verifique que el esquema de URL personalizado esté definido correctamente.

Para aclarar, si mi comprensión de la publicación de Grupos de Google vinculados es correcta, la biblioteca Firebase Dynamic Links solo verifica los 'enlaces dynamics pendientes' una vez. Nunca. Entonces, si la aplicación ya ha verificado los enlaces pendientes, necesitará eliminarlo y volver a instalarlo para volver a verificarlo.

Ahora, para responder a su pregunta, normalmente ninguno de estos dos methods se llamará si la aplicación no está instalada cuando se hace clic en el enlace. El método openURL responde a esquemas de URI personalizados, y el método continueUserActivity responde a Universal Links. Ninguno de estos está siendo utilizado cuando el usuario abre la aplicación luego de downloadla por primera vez. La documentation de Firebase dice que el método openURL siempre openURL la installation inicial, pero nunca lo he visto en ningún otro lugar, por lo que es posible que estén haciendo algo inusual.

A riesgo de salir del tema, sugiero echar un vistazo a Branch.io (revelación completa: estoy en el equipo). Obtendrá todos los beneficios de Dynamic Links, además de una list exhaustiva de funcionalidad adicional y documentation más clara 🙂