Ожидающие обработки динамические ссылки Firebase не работают

Согласно документации 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: теперь вызывается при первом открытии приложения, если ссылка была открыта на устройстве раньше.


person Olexandr Stepanov    schedule 21.09.2016    source источник


Ответы (2)


Диплинкинг после установки основан на проверке флага:

  • [FIRApp configure] позвонил
  • SDK Dynamic Links проверяет, является ли это новой установкой (например, нет флага)
  • Если это так, он вызывает API динамических ссылок, чтобы проверить, есть ли динамическая ссылка для разрешения
  • Если да, SDK вызывает [[UIApplication sharedApplication] openURL:url];, используя настраиваемую схему URL-адресов, настроенную вручную для FIROptions, или идентификатор пакета в нижнем регистре (например, com.foo.bar).

Если вы не получаете его, проверьте, правильно ли определена настраиваемая схема URL.

person Ian Barber    schedule 18.10.2016
comment
Спасибо, @ ian-barber, за объяснение. Я установил свойство deepLinkURLScheme для FIROptions, и оно начало работать. Если вы являетесь членом команды Firebase, определенно стоит добавить эти примечания в документ DynamicLinks. - person Olexandr Stepanov; 20.10.2016
comment
@OlexandrStepanov У меня та же проблема, я думаю, что установил свои deepLinkURLSchemes по мере необходимости: FIROptions.default (). DeepLinkURLScheme = com.foo.boo FIRApp.configure () Можете ли вы объяснить, как вам удается смоделировать первую установку приложения с помощью xcode? - person jerem; 04.01.2017
comment
Документ обновлен! Спасибо. Вы можете сделать это более понятным, установив: FIROptions.default (). DeepLinkURLScheme = Bundle.main.bundleIdentifier - person CedricSoubrie; 13.04.2017

Чтобы уточнить, если я правильно понимаю связанный пост в группах Google, библиотека динамических ссылок Firebase проверяет наличие «ожидающих динамических ссылок» только один раз. Всегда. Поэтому, если приложение уже проверило ожидающие ссылки, вам нужно удалить его и переустановить, чтобы проверить еще раз.

Теперь, чтобы ответить на ваш вопрос, ни один из этих двух методов не будет обычно вызываться, если приложение не устанавливается при нажатии на ссылку. Метод openURL отвечает на настраиваемые схемы URI, а метод continueUserActivity отвечает на универсальные ссылки. Ни один из них не используется, когда приложение вручную открывается пользователем после загрузки в первый раз. В документации Firebase говорится метод openURL всегда вызывается при начальной установке, но я никогда не видел, чтобы это происходило где-либо еще, поэтому возможно, что они делают что-то необычное.

Рискуя отклониться от темы, я бы посоветовал взглянуть на Branch.io (полное раскрытие: я на команда). Вы получите все преимущества динамических ссылок, а также обширный список дополнительных функций и более понятную документацию :)

person Alex Bauer    schedule 24.09.2016
comment
Спасибо @AlexBauer, я бы подумал об использовании Branch.io. Но после моего вопроса вы сказали, что библиотека динамических ссылок Firebase проверяет наличие «ожидающих динамических ссылок» только один раз. Хорошо, они проверяют, но как приложение может узнать об этих ожидающих динамических ссылках, что они действительно существуют для этого первого запуска? Приходилось ли вам когда-нибудь работать с этими ожидающими динамическими ссылками в вашем опыте работы с Firebase DL? Если да, то как? - person Olexandr Stepanov; 26.09.2016
comment
«Ожидающая динамическая ссылка» фактически нигде не используется командой Firebase. В ветке обсуждения он использовался для обозначения концепции «ссылки, которую пользователь открыл перед первой установкой приложения». Все это делается за кулисами, поэтому все, о чем вам следует нужно заботиться, это то, что вы получите тот же результат, независимо от того, установлено ли приложение уже или нет. Конечно, сейчас нет, вот в чем проблема! Похоже, в документации есть другой - (BOOL)application:(UIApplication *)application метод, который может быть предназначен только для новых установок - у вас есть оба настроенных? - person Alex Bauer; 27.09.2016
comment
Да, я определенно настроил оба метода делегата приложения, и я вижу, что каждый из них вызывается при разных обстоятельствах: openURL при открытии ссылки из Chrome, continueUserActivity при открытии из Safari, оба на iOS9. Но ни один из методов не вызывается после новой установки. Чтобы быть точным, шаги следующие: удалить приложение с устройства, открыть динамическую ссылку на устройстве, он открывает URL-адрес внутри параметра link, установить приложение из XCode и запустить с точками останова в обоих методах делегата приложения - ›ни один из методов не вызван. Итак, вы верите, что это ошибка Firebase? - person Olexandr Stepanov; 28.09.2016
comment
Кажется, есть три метода делегата, а не два. У вас есть второй openURL? - person Alex Bauer; 28.09.2016