Есть ли способ узнать, что приложение было установлено через динамическую ссылку firebase в didFinishLaunchingWithOptions?
Я реализую динамические ссылки firebase в своем приложении для iOS, и я уже могу проанализировать ссылку, перенаправить в AppStore и т. Д. Теперь я хочу отличить первый запуск приложения, когда пользователь устанавливает его, из динамической ссылки - я хочу пропустить введение и покажите ему содержание, которое, как ожидается, будет показано.
Есть ли какой-то параметр, который я мог бы поймать в application(_:didFinishLaunchingWithOptions:)
чтобы я мог сказать, что он был запущен через динамическое соединение?
Метод application(_:continueUserActivity:userActivity:restorationHandler:)
называется позже, поэтому интро уже запущено.
Этот случай трудно проверить, потому что ваше приложение должно быть опубликовано в AppStore.
2 ответа
На самом деле вам не нужно публиковать приложение в App Store, чтобы это работало - щелкнув ссылку, закройте App Store, а затем установите сборку приложения через XCode (или любую другую платформу для бета-распространения, такую как TestFlight или Fabric), точно такой же эффект.
Согласно документации Firebase, метод, который вызывается для первой установки: openURL
(нет, для меня это тоже не имеет смысла). continueUserActivity
Этот метод предназначен для универсальных ссылок и используется только в том случае, если приложение уже установлено при открытии ссылки.
Я не знаю какого-либо способа определить, когда приложение открывается в первый раз после установки, по "отложенной" ссылке, но вы можете просто направить напрямую к общему контенту (пропуская вступление), когда присутствует глубокая ссылка. Если глубокая ссылка НЕ присутствует, покажите обычное вступление.
Альтернативный вариант
Вы можете проверить https://branch.io/ (полное раскрытие: я в команде Branch). Помимо прочего, Branch является отличной бесплатной заменой динамических ссылок Firebase с множеством дополнительных функций. Вот пример всех параметров, которые Branch немедленно возвращает в didFinishLaunchingWithOptions
:
{
"branch_view_enabled" = 0;
"browser_fingerprint_id" = "<null>";
data = "{
\"+is_first_session\":false,
\"+clicked_branch_link\":true,
\"+match_guaranteed\":true,
\"$canonical_identifier\":\"room/OrangeOak\",
\"$exp_date\":0,
\"$identity_id\":\"308073965526600507\",
\"$og_title\":\"Orange Oak\",
\"$one_time_use\":false,
\"$publicly_indexable\":1,
\"room_name\":\"Orange Oak\", // this is a custom param, of which you may have an unlimited number
\"~channel\":\"pasteboard\",
\"~creation_source\":3,
\"~feature\":\"sharing\",
\"~id\":\"319180030632948530\",
\"+click_timestamp\":1477336707,
\"~referring_link\":\"https://branchmaps.app.link/qTLPNAJ0Jx\"
}";
"device_fingerprint_id" = 308073965409112574;
"identity_id" = 308073965526600507;
link = "https://branchmaps.app.link/?%24identity_id=308073965526600507";
"session_id" = 319180164046538734;
}
Вы можете прочитать больше об этих параметрах в документации филиала здесь.
Хм... насколько я знаю, на самом деле нет ничего, что вы можете поймать в application:(_:didFinishLaunchingWithOptions)
фаза, которая позволит вам узнать, что приложение открывается по динамической ссылке. Вам придется подождать, пока continueUserActivity
звоните, как вы упомянули.
Это сказало, FIRDynamicLinks.dynamicLinks()?.handleUniversalLink
возвращает логическое значение почти мгновенно, так что вы должны иметь возможность воспользоваться этим для короткого замыкания в анимации, не вызывая при этом неудобства для пользователя. Сам обратный вызов может произойти только через несколько миллисекунд, в зависимости от того, является ли это укороченным динамическим каналом (для которого требуется сетевой вызов) или расширенным (которого нет).