Согласно документации Firebase Dynamic Links, даже если приложение не установлено, если пользователь открывает ссылку на устройстве, открывается страница приложения в Appstore и после установки приложения приложение обрабатывает ссылку при первом запуске. После некоторого исследования того, как это работает, я обнаружил, что в Firebase есть нечто, называемое «ожидающими динамическими ссылками», и ожидается, что метод AppDelegate вызывается со следующими ссылками:
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey, id> *)options
Источник этого предположения: https://groups.google.com/forum/#!msg/firebase-talk/2STD8eIi61I/8KJqZN7TBAAJ
Но когда я пытаюсь протестировать эту функцию «ожидающих динамических линков», ни один из этих двух методов AppDelegate не был вызван.
-(BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray *))restorationHandler
-(BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey, id> *)options
В то же время, если приложение установлено, динамические ссылки работают должным образом, открываясь через метод openURL: при открытии из приложения gmail через Chrome, через универсальные ссылки в iOS9 и более поздних версиях, если они открываются из приложения Notes или Mail (на самом деле через Safari).
Итак, мой вопрос: как ожидают работать «ожидающие динамические ссылки»? В чем может быть причина, по которой мое приложение их не обрабатывает?
---------------- ИЗМЕНИТЬ ----------------
Проблема заключалась в том, что по умолчанию Firebase пытается открыть приложение со схемой URL, которая соответствует идентификатору пакета приложений, что не было в моем случае. Я изменил свою конфигурацию Firebase на следующую:
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"GoogleService-Info" ofType:@"plist"];
FIROptions *options = [[FIROptions alloc] initWithContentsOfFile:filePath];
options.deepLinkURLScheme = @"MY-CUSTOM-SCHEME";
[FIRApp configureWithOptions:options];
И он начинает работать, например openURL:
теперь вызывается при первом открытии приложения, если ссылка была открыта на устройстве раньше.