Проблеми TypeScript у світі React-додатків вiд Iллi Климова на React fwdays | 27 березня
×Закрыть

Deep links во Flutter: iOS (Universal links) и Android (App links)

Підписуйтеся на Telegram-канал «DOU #tech», щоб не пропустити нові технічні статті.

Доброго времени суток, продолжаем цикл статей о deep links в flutter.

Первая часть о Custom links — здесь.

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

iOS (Universal links)

Для начала необходимо включить associated domains. Сделать это можно как через XCode, так и через файл Runner.entitlemens.

Через XCode:

Переходим в Project → Runner → Targets и во вкладке Signing & Capabilities нажимаем + Capability. В выпавшем списке выбираем Associated Domains. В поле domains вписываем applinks:[НАШ_ХОСТ] и получаем applinks:myapp.com.

Через файл Runner.entitlemens:

Переходим в ios/Runner/ Runner.entitlemens и добавляем следующий код:

<key>com.apple.developer.associated-domains</key>
	<array>
		<string>applinks:[НАШ_ХОСТ]</string> // applinks:myapp.com

	</array>

Далее необходимо создать и загрузить на наш хост файл apple-app-site-association. Файл имеет структуру JSON, но не имеет расширения. Выглядит он следующим образом:

{
    "applinks": {
        "apps": [],
        "details": [{
            "appID": "[TEAM_ID].[APP_BUNDLE_ID]",
            "paths": ["[PATH_FOR_REDIRECTION]"]
        }]
    }
}

Чтобы получить TEAM_ID необходимо перейти в аккаунт разработчика в раздел Account → Membership и найти поле Team ID (к примеру: UP******H, где * - это цифры 0-9 или буквы A-Z).

APP_BUNDLE_ID — id вашего проекта (к примеру: com.example.myapp).

PATH_FOR_REDIRECTION указывает при переходе на какую страницу сайта нам будет предложено перейти в приложение. Давайте рассмотрим поподробнее:

"paths": [
	"/your_path", // будем перенаправлены если перейдем по <https://myapp.com/your_path>
	"/your_path/*", // будем перенаправлены если перейдем по <https://myapp.com/your_path/[что_угодно_дальше]>
	"*", // будем перенаправлены по любой ссылке <https://myapp.com/[что_угодно_дальше]>
	"NOT /your_path", // будем перенаправлены по любой ссылке кроме <https://myapp.com/your_path>
	"NOT /your_path/*", // будем перенаправлены по любой ссылке кроме <https://myapp.com/your_path/[что_угодно_дальше]>
] 

Файл apple-app-site-association должен находиться либо в корневой папке вашего хоста, либо в директории .well-known/apple-app-site-association.

Примечания:

Проверить, все ли хорошо с файлом apple-app-site-association, можно здесь или здесь.
Схема обязательно должна быть «https».

Больше о Universal links для iOS можно почитать здесь.

Android (App links)

Для начала открываем файл android/app/src/main/AndroidManifest.xml и указываем:

<manifest ...>
  <!-- ... other tags -->
  <application ...>
    <activity ...>
      <!-- ... other tags -->
      <!-- App Links -->
      <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" />
        <!-- Accepts URIs that begin with https://YOUR_HOST -->
        <data
          android:scheme="https"
          android:host="myapp.com" />
      </intent-filter>
    </activity>
  </application>
</manifest>

где android:host — ваш хост. В случае примера это myapp.com.

Так же после android:host можно указать android:pathPrefix = "/[YOUR_PATH]" — путь по которому будет открываться ваше приложение, к примеру:

<data
  android:scheme="https"
  android:host="myapp.com"
	android:pathPrefix = "/articles" />

Так же в корневой папке, либо в .well-known нужно добавить файл assetlinks.json:

{
    "relation": [
      "delegate_permission/common.handle_all_urls"
    ],
    "target": {
      "namespace": "android_app",
      "package_name": "[APP_BUNDLE_ID]", // пример: com.example.myapp
      "sha256_cert_fingerprints": [
        "[YOUR_MACHINE_256_FINGERPRINT_1", // к примеру debug ключ
        "[YOUR_MACHINE_256_FINGERPRINT_2", // к примеру release ключ
        "[PLAY_MARKET_256_FINGERPRINT", // если используете автоматические ключи в плей маркете
      ]
    }
  }
]

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

Найти их можно либо через Android Studio, либо через командную строку.

Больше информации по App links можно найти здесь.

Благодарю за уделенное время, надеюсь был полезен. Увидимся в следующей части❤️

👍НравитсяПонравилось0
В избранноеВ избранном0
Подписаться на автора
LinkedIn

Похожие статьи

Допустимые теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Допустимые теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

А нет ли у Вас другой информации про ту сторону: как настроить сервер для Universal Links. Какие требование к серверу и т.д.

Подписаться на комментарии