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

Другие вопросы по тегам