Переход с динамических ссылок на ссылки на приложения & Универсальные ссылки

В этом руководстве по миграции основное внимание уделяется использованию ссылок на приложения и универсальных ссылок , а также дополнительно использованию хостинга Firebase для размещения файлов связи вашего приложения с сайтом.

Эта миграция заменяет следующие функции Firebase Dynamic Links:

Особенность Динамические ссылки Firebase Ссылки на приложения/универсальные ссылки
Направляйте пользователей в магазин, соответствующий их устройству, одним щелчком ссылки.
Предоставьте пользователям возможность продолжить путешествие после загрузки и установки вашего приложения с помощью отложенной глубокой ссылки.
Предоставьте пользователям контекстный опыт, используя контент с глубокими ссылками в вашем приложении (если оно уже установлено).
Предоставление аналитических данных, связанных с событиями щелчков по динамическим ссылкам.
Предоставить возможность создавать URL-адреса коротких ссылок.

Если для миграции вам по-прежнему нужны другие функции Firebase Dynamic Link, которые не поддерживаются в этом руководстве, см. другие сценарии миграции в документации по часто задаваемым вопросам об устаревании динамических ссылок .

Предположим, у вас есть динамическая ссылка Firebase, которая выглядит следующим образом:

Пример динамической ссылки
Имя ссылки Добро пожаловать на сайт example.com.
Глубокая ссылка https://example.web.app/welcome
Android-приложение com.example.android
приложение Apple com.example.ios
Длинная динамическая ссылка https://example.page.link/?link=https://example.web.app/welcome&apn=com.example.android&isi=123456789&ibi=com.example.iuos
Короткая динамическая ссылка https://example.page.link/m9Mm

Цель этого руководства по миграции — заменить динамические ссылки Firebase следующим образом:

https://example.page.link/m9Mm

С глубокими ссылками App Link/Universal Link, которые выглядят следующим образом:

https:// your-project-domain .web.app/welcome

Обратите внимание, что глубокая ссылка App Link/Universal Link предоставит вашим пользователям следующее:

  • Глубокая ссылка, по которой они могут нажать, чтобы открыть ваше приложение, когда оно уже установлено.
  • Продолжение пользовательского пути, направляющее их к определенной части вашего приложения при его открытии.

Однако глубокая ссылка App Link/Universal Link не будет обеспечивать следующие действия для ваших пользователей (что ранее делал Firebase Dynamic Links):

  • Направление пользователей в магазин, соответствующий их устройству, для загрузки и установки вашего приложения.
  • Обеспечение продолжения пользовательского пути после загрузки, установки и первого открытия приложения.

Обратите внимание на различия в поведении и функциональности этих ссылок на приложения/универсальных ссылок по сравнению с динамическими ссылками Firebase, указанные в таблице выше.

Прежде чем вы начнете

Firebase Dynamic Links использует ссылки на приложения (на Android) и универсальные ссылки (на iOS) в своей собственной базовой реализации, чтобы обеспечить функциональность глубоких ссылок после того, как ваше приложение уже установлено.

В этом руководстве рассказывается, как создавать собственные ссылки на приложения и универсальные ссылки с помощью хостинга Firebase, чтобы заменить ту часть функциональности, предоставляемую динамическими ссылками Firebase, при переносе динамических ссылок Firebase в новое решение для миграции ссылок на приложения или универсальных ссылок.

Для завершения миграции вам потребуется следующая информация:

  • Динамические ссылки Firebase, которые вы собираетесь перенести.
  • Параметры URL-адреса глубокой ссылки, включенные в ваши динамические ссылки.
  • Домен, который вы планируете использовать для замены предыдущего домена Firebase Dynamic Links (если применимо).

Вы можете использовать руководство «Экспорт метаданных динамических ссылок», чтобы экспортировать существующие метаданные ссылок и получить информацию, указанную выше.

Обзор этапов миграции

  1. Предоставьте новый домен (если у вас его еще нет, который вы хотите использовать) для размещения файлов конфигурации App Link/Universal Link с помощью хостинга Firebase.

  2. Создайте и разместите файлы конфигурации App Link/Universal Link в своем домене хостинга.

  3. Создайте новые ссылки на приложения или универсальные ссылки, соответствующие схеме глубоких ссылок, используемой в ваших динамических ссылках Firebase.

  4. Обновите свои приложения Android/iOS и код приложения, чтобы получать глубокие ссылки.

  5. Тестирование интеграции App Links/Universal Links.

  6. Замените опубликованные или общие динамические ссылки Firebase ссылками на приложения и универсальными ссылками.

Первый шаг будет общим для потоков миграции App Links и Universal Link. Остальное будет зависеть от платформы, поэтому перейдите к разделу руководства ниже в зависимости от того, какую платформу вы хотите перенести в первую очередь.

Выберите домен

Первый шаг — выбрать домен, который вы хотели бы использовать для своих ссылок на приложения или универсальных ссылок. Это будет домен, который будет использоваться для новых ссылок, которыми вы поделитесь со своими пользователями.

Если вы используете хостинг Firebase , субдомены проекта в формате your-project-domain .web.app или your-project-domain .firebaseapp.com автоматически предоставляются бесплатно. При желании вы также можете использовать собственный домен с хостингом Firebase или без него для размещения файлов конфигурации App Link/Universal Link.

Настройте хостинг Firebase

Далее вам нужно будет настроить экземпляр хостинга Firebase .

К тому времени, как вы закончите настройку экземпляра хостинга Firebase, у вас будет домен, аналогичный your-project-domain .web.app `, или собственный домен, если вы предпочитаете.

Чтобы использовать ссылки на приложения, вам необходимо разместить файл конфигурации, который поможет установить безопасную связь между доменом, используемым в ваших ссылках, и вашим приложением. Для ссылок на приложения это файл assetlinks.json .

Действия по созданию и размещению файла assetslinks.json

Файл assetlinks.json позволяет нам предоставить список авторизованных приложений, которые могут обрабатывать содержимое веб-домена, который мы будем использовать для наших ссылок на приложения. Сам файл assetslinks.json должен размещаться в корне веб-домена по пути: /.well-known .

Для завершения этой конфигурации выполните следующие действия:

  1. Создайте папку .well-known в общей папке в корневом каталоге хостинга Firebase.

  2. Создайте файл с именем assetlinks.json в папке .well-known .

  3. Скопируйте следующее содержимое в файл assetslinks.json, обращая внимание на значение каждого поля ниже:

    [{
      "relation": ["delegate_permission/common.handle_all_urls"],
      "target": {
        "namespace": "android_app",
        "package_name": "com.example.android",
        "sha256_cert_fingerprints":
          ["01:23:45:67:89:AB:CD:EF:01:23:45:67:89:AB:CD:EF:01:23:45:67:89:AB:CD:EF:01:23:45:67:89:AB:CD:EF"]
      }
    }]
    
    • namespace — относится к имени приложения, которое вы хотите предоставить.
    • package_name — относится к идентификатору приложения, объявленному в файле build.gradle приложения.
    • sha256_cert_fingerprints — относится к отпечатку SHA256 файла хранилища ключей, который вы используете для подписи приложения.

    Вы можете использовать файл debug.keystore, используемый Android Studio, для создания записи sha256_cert_fingerprints в целях отладки. Вы можете найти файл по адресу /Users/<username>/.android/debug.keystore в Mac и Linux и C:\Users\<username>\.android\debug.keystore в Windows.

    Из этого хранилища ключей вы можете получить значение SHA256 с помощью инструмента ключей.

    Дополнительные инструкции по выполнению этого шага см. в этом разделе документации по ссылкам на приложения .

    Альтернативно вы также можете использовать Помощник по ссылкам на приложения в Android Studio, чтобы сгенерировать содержимое файла assetslinks.json и настроить приложение для обработки ссылок на приложения.

  4. Обновите файл firebase.json, чтобы проиндексировать его для хостинга.

    "headers": [
      {
        "source": "/.well-known/assetlinks.json",
        "headers": [
          {
            "key": "Content-Type",
            "value": "application/json"
          }
        ]
      }
    ]
    
  5. Теперь, когда у нас есть файл assetslinks.json, запустите firebase deploy , чтобы разместить изменения.

    Обратите внимание, что для запуска указанной выше команды развертывания вам потребуется установить интерфейс командной строки Firebase .

    firebase deploy --only hosting
    
  6. Проверьте файл assetslinks.json, перейдя по адресу https:// your-project-domain .web.app/.well-known/assetlinks.json

На этом этапе вы воссоздадите глубокие ссылки из своих динамических ссылок Firebase, используя обычные URL-адреса глубоких ссылок, соответствующие новому домену, который вы создали для своих ссылок на приложения.

Например, предположим, что у вас есть следующая динамическая ссылка Firebase:

Пример динамической ссылки
Имя ссылки Добро пожаловать на сайт example.com.
Глубокая ссылка https://example.web.app/welcome
Android-приложение com.example.android
приложение Apple com.example.ios
Длинная динамическая ссылка https://example.page.link/?link=https://example.web.app/welcome&apn=com.example.android&isi=123456789&ibi=com.example.iuos
Короткая динамическая ссылка https://example.page.link/m9Mm

В этом случае вы должны извлечь параметр глубокой ссылки, то есть https://example.web.app/welcome, и теперь использовать его в качестве параметра App Link для своего приложения.

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

Например, см. следующий набор коротких ссылок Firebase Dynamic Links, параметров глубоких ссылок и перенесенных значений глубоких ссылок:

Короткая ссылка Параметр глубокой ссылки Перенесенная глубокая ссылка
yourapp.page.link/добро пожаловать https://example.com/добро пожаловать yourapp.web.app/добро пожаловать
yourapp.page.link/c7sn https://example.com/main/?p=23&t=1 yourapp.web.app/main/?p=23&t=1
yourapp.page.link/social https://example.com/friendinvite/?add=1 yourapp.web.app/friendinvite/?add=1

Затем вам необходимо заменить все экземпляры динамических ссылок Firebase, которые были опубликованы или предоставлены к совместному использованию, новыми перенесенными глубокими ссылками, чтобы пользователи могли нажимать на эти ссылки на приложения вместо предыдущих динамических ссылок Firebase.

Следующим шагом после выбора домена, выбора схемы глубоких ссылок и переноса динамических ссылок Firebase в ссылки на приложения является обновление вашего приложения Android и кода приложения для получения новых глубоких ссылок.

Мы рекомендуем ознакомиться с полной документацией по ссылкам на приложения здесь или, в качестве альтернативы, с руководством Android Studio по настройке вашего приложения для обработки глубоких ссылок, но основные шаги включают в себя:

  1. Определение того, какие действия должны обрабатывать соответствующие глубокие ссылки.
  2. Добавление фильтра намерений для этих действий в файл AndroidManifest.xml.
  3. Получение глубокой ссылки в коде приложения ваших действий

Допустим, вы хотите использовать MainActivity для обработки некоторых глубоких ссылок. Для этого вам нужно будет добавить следующий фильтр намерений в MainActivity в файле AndroidManifest.xml:

<activity android:name=".MainActivity"
   android:exported="true">
   <intent-filter>
       <action android:name="android.intent.action.MAIN" />
       <category android:name="android.intent.category.LAUNCHER" />
   </intent-filter>
   <intent-filter android:autoVerify="true">
       <action android:name="android.intent.action.VIEW" />
       <category android:name="android.intent.category.DEFAULT" />
       <category android:name="android.intent.category.BROWSABLE" />
       <data android:host="example.web.app" android:scheme="http"
           android:pathPrefix="/welcome" />
       <data android:host="example.web.app" android:scheme="https"
           android:pathPrefix="/welcome" />
   </intent-filter>
</activity>

На этом этапе вы указываете, что MainActivity является местом назначения для обработки глубоких ссылок из домена wxample.web.app и включает префикс пути /welcome. Обратите внимание, что вам также необходимо указать атрибут android:autoVerify="true", который позволит вам назначить ваше приложение обработчиком по умолчанию для данного типа ссылки.

Наконец, вам нужно будет добавить код в свою MainActivity, чтобы получить данные глубоких ссылок и использовать их для улучшения работы глубоких ссылок в вашем приложении. Это похоже на логику, которую вы, возможно, уже запрограммировали в своем приложении при интеграции с Firebase Dynamic Links.

override fun onCreate(savedInstanceState: Bundle?) {
  super.onCreate(savedInstanceState)
  setContentView(R.layout.main)

  val  data: Uri? = intent?.data

  val toast = Toast.makeText(this, data, duration)
  toast.show()
}

Вы можете протестировать только что созданные ссылки на приложения, запустив приложение на физическом устройстве или в эмуляторе Android .

Вам нужно будет создать интерактивную ссылку, используя домен, настроенный для ваших ссылок на приложения, а затем щелкнуть эту ссылку, чтобы убедиться, что она открывается в вашем приложении и направляет вас к намеченному действию.

В качестве альтернативы вы также можете протестировать интеграцию ссылок на приложения с помощью Помощника по ссылкам на приложения в Android Studio или использовать следующую команду для URL-адреса ссылки на приложение, который вы настроили, чтобы убедиться, что он правильно запускает соответствующее действие:

adb shell am start -a android.intent.action.VIEW -d <your_deep_link_url>

Последним шагом вашей миграции будет замена опубликованных или общих динамических ссылок Firebase ссылками на приложения, где это возможно, и продолжение использования ссылок на приложения в дальнейшем.

Выполнение этого шага будет зависеть от того, где и как вы опубликовали свои динамические ссылки Firebase, но чтобы помочь вам отслеживать, какие из них существуют, вы можете экспортировать существующие метаданные Firebase Dynamic Link. См. руководство по экспорту метаданных динамических ссылок .

Чтобы использовать Universal Links, вам необходимо разместить файл конфигурации, который поможет установить безопасную связь между доменом, используемым в ваших ссылках, и вашим приложением. Для универсальных ссылок это файл apple-app-site-association (также известный как файл AASA).

Действия по созданию и размещению файла apple-app-site-association

Файл AASA позволяет нам предоставить список авторизованных приложений, которые могут обрабатывать содержимое веб-домена, который мы будем использовать для наших универсальных ссылок. Сам файл AASA должен размещаться в корне веб-домена по пути: /.well-known.

Для завершения этой конфигурации выполните следующие действия:

  1. Создайте папку « .well-known » в общей папке в корневом каталоге хостинга Firebase.

  2. Создайте файл с именем « apple-app-site-association » в папке «.well-known».

  3. Скопируйте следующее содержимое в файл apple-app-site-association, принимая во внимание значение каждого поля ниже:

    {
      "applinks": {
        "apps": [],
        "details": [
          {
            "appId": "$TEAM_ID.com.firebase.UniversalLinks",
            "paths": [
              "NOT /_/*",
              "/*"
            ]
          }
        ]
      }
    }
    
    • $TEAM_ID.BundleId — полное имя приложения, уполномоченного обрабатывать ссылки.
  4. Обновите файл firebase.json, чтобы проиндексировать его для хостинга.

    "headers": [
      {
        "source": "/.well-known/apple-app-site-association",
        "headers": [
          {
            "key": "Content-Type",
            "value": "application/json"
          }
        ]
      }
    ]
    
  5. Теперь, когда у нас есть файл AASA, выполните развертывание Firebase для размещения изменений.

  6. Проверьте файл AASA, перейдя по адресу https:// your-project-domain .web.app/.well-known/app-app-site-association.

На этом этапе вы воссоздадите глубокие ссылки из своих динамических ссылок Firebase, используя обычные URL-адреса глубоких ссылок, соответствующие новому домену, который вы создали для своих универсальных ссылок.

Например, предположим, что у вас есть следующая динамическая ссылка Firebase:

Пример динамической ссылки
Имя ссылки Добро пожаловать на сайт example.com.
Глубокая ссылка https://example.web.app/welcome
Android-приложение com.example.android
приложение Apple com.example.ios
Длинная динамическая ссылка https://example.page.link/?link=https://example.web.app/welcome&apn=com.example.android&isi=123456789&ibi=com.example.iuos
Короткая динамическая ссылка https://example.page.link/m9Mm

В этом случае вы должны извлечь параметр глубокой ссылки, то есть https://example.web.app/welcome, и теперь использовать его в качестве параметра универсальной ссылки для своего приложения.

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

Например, см. следующий набор коротких ссылок Firebase Dynamic Links, параметров глубоких ссылок и перенесенных значений глубоких ссылок:

Короткая ссылка Параметр глубокой ссылки Перенесенная глубокая ссылка
yourapp.page.link/добро пожаловать https://example.com/добро пожаловать yourapp.web.app/добро пожаловать
yourapp.page.link/c7sn https://example.com/main/?p=23&t=1 yourapp.web.app/main/?p=23&t=1
yourapp.page.link/social https://example.com/friendinvite/?add=1 yourapp.web.app/friendinvite/?add=1

Затем вам нужно будет заменить все экземпляры динамических ссылок Firebase, которые были опубликованы или предоставлены к совместному использованию, новыми перенесенными глубокими ссылками, чтобы пользователи могли нажимать на эти универсальные ссылки вместо предыдущих динамических ссылок Firebase.

Следующим шагом после выбора домена, выбора схемы глубоких ссылок и переноса динамических ссылок Firebase в универсальные ссылки является обновление вашего приложения iOS и кода приложения для получения новых глубоких ссылок.

Мы рекомендуем следовать полной документации Universal Links здесь, чтобы настроить ваше приложение для обработки глубоких ссылок, но основные шаги включают в себя:

  1. Обновите конфигурацию проекта, чтобы приложение могло обрабатывать глубокие ссылки из недавно созданного домена.

  2. Получите глубокую ссылку в коде вашего приложения

Чтобы обновить конфигурацию вашего проекта, чтобы ваше приложение могло обрабатывать глубокие ссылки, вам необходимо добавить в проект в xCode дополнительный связанный домен для домена, который вы сейчас планируете использовать для размещения вашего сайта apple-app-site. связанный файл.

Это можно сделать следующим образом:

  1. Открытие Xcode
  2. Выбор вашего проекта в файловом навигаторе
  3. Переход на вкладку «Подписание и возможности» в настройках вашего проекта.
  4. Перейдите вниз к разделу «Связанные домены».
  5. Нажав кнопку +, вы добавите дополнительный домен в свой проект в формате «applinks: ".

Наконец, вам необходимо обновить код приложения, чтобы иметь возможность получать входящие глубокие ссылки.

Для этого сначала обновите файл AppDelegate.swift, чтобы он реагировал на универсальную ссылку, добавив следующий код:

func application(_ application: UIApplication, continue userActivity: NSUserActivity,
                 restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
  AppDelegate.showReceivedUrl(userActivity: userActivity);
  return true
}

static func showReceivedUrl(userActivity: NSUserActivity) {
  if userActivity.activityType == NSUserActivityTypeBrowsingWeb {
    let url = userActivity.webpageURL!
    print(url.absoluteString)
}

Приведенный выше код переопределяет метод обратного вызова Universal Link и регистрирует URL-адрес глубокой ссылки, если он присутствует.

Теперь мы будем вызывать тот же метод showReceivedUrl из класса SceneDelegate, поскольку, если приложение уже открыто к моменту, когда пользователь нажимает на универсальную ссылку, будет вызван обратный вызов универсальной ссылки внутри SceneDelegate .

func scene(_ scene: UIScene, continue userActivity: NSUserActivity) {
  AppDelegate.showReceivedUrl(userActivity: userActivity)
}

Вы можете протестировать только что созданные универсальные ссылки, запустив приложение на физическом устройстве или в симуляторе .

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

Поддержка смарт-баннеров приложений

Мы настоятельно рекомендуем использовать смарт-баннеры приложений , чтобы предоставить вашим пользователям опыт, аналогичный динамическим ссылкам Firebase.

Используя смарт-баннеры приложений, ваши пользователи будут перенаправлены в App Store для просмотра вашего приложения, если ваше приложение еще не установлено на их устройстве. Вы также можете при желании настроить параметр, который будет передаваться в ваше приложение после его загрузки и установки, чтобы предоставить вашим пользователям возможность продолжить их путешествие. Если ваше приложение уже установлено, оно откроет возможность передачи параметра в ваше приложение, чтобы помочь пользователю перейти к соответствующему контенту на основе смарт-баннера приложения, на который он щелкнул.

Последним шагом вашей миграции будет замена опубликованных или общих динамических ссылок Firebase на универсальные ссылки, где это возможно, и продолжение использования универсальных ссылок в дальнейшем.

Выполнение этого шага будет зависеть от того, где и как вы опубликовали динамические ссылки Firebase.

Чтобы помочь вам отслеживать существующие динамические ссылки Firebase, подлежащие переносу, мы опубликуем руководство о том, как экспортировать метаданные коротких ссылок из Firebase Dynamic Links. Дополнительную информацию можно найти в нашем документе «Часто задаваемые вопросы по устареванию динамических ссылок» .