Deeplinks во Flutter: настройка для Android и iOS
Диплинки позволяют открывать приложение по ссылке - перешел по URL и сразу попал на нужный экран. Смена пароля по ссылке из письма, открытие конкретного видео или поста, переход на карточку товара по ссылке - все это работает через deeplinks. Во Flutter нет единого решения, потому что механизм завязан на платформу. Придется настраивать Android и iOS отдельно, но это не так страшно, как кажется.
Для обработки ссылок внутри Flutter удобнее всего использовать пакет app_links. Он официально поддерживается, работает на всех платформах.
Добавляем пакет в проект:
Для добавления пакета в проект можно выполнить команду в терминале:
flutter pub add app_links
Либо добавить следующую строку в блок dependencies в файле pubspec yaml:
app_links: ^7.1.1
Настройка для Android:
В файле android/app/src/main/AndroidManifest.xml внутри <activity> нужно добавить intent-filter. Это правило, которое говорит системе что нужно обрабатывать ссылки такого вида.
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="https" android:host="your-domain.com" />
</intent-filter>
Если используете кастомную схему (не http/https), укажите ее вместо https.
App Links (https):
Для автоматического открытия ссылок в приложении нужно:
🔹 Указать android:autoVerify="true" в intent-filter.
🔹 Разместить файл assetlinks.json на сервере в папке .well-known (домен должен совпадать с указанным в intent-filter).
Пример файла assetlinks json:
[
{
"relation": [
"delegate_permission/common.handle_all_urls"
],
"target": {
"namespace": "android_app",
"package_name": "com.example.yourapp",
"sha256_cert_fingerprints": [
"ваш SHA256 отпечаток"
]
}
}
]
SHA256 можно получить из Google Play Console или сгенерировать через keytool.
Настройка для iOS:
Custom scheme:
Добавьте схему в Xcode: откройте Info plist как исходный код и добавьте:
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleURLSchemes</key>
<array>
<string>myapp</string>
</array>
</dict>
</array>
Universal Links (https):
Нужно:
🔹 Включить Associated Domains в Capabilities проекта Xcode.
🔹 Добавить applinks:your-domain.com.
🔹 Разместить файл apple-app-site-association на сервере в папке .well-known.
Пример файла apple-app-site-association:
{
"applinks": {
"apps": [],
"details": [
{
"appID": "TEAMID.com.example.yourapp",
"paths": ["*"]
}
]
}
}
TEAMID можно найти в Apple Developer Account.
🔗 Читать подробнее
Вывод:
Диплинки во Flutter настраиваются в несколько этапов: правим манифест на Android, добавляем entitlements на iOS, кладем файлы на сервер, а в коде используем app_links для получения ссылок и Navigator для переходов. app_links берет на себя всю сложность получения deeplink на обеих платформах. Вам остается только подписаться на поток и написать логику переходов.
После правильной настройки приложение будет корректно открываться по ссылкам из писем, мессенджеров или браузера. Главное не забыть протестировать все сценарии и убедиться, что файлы assetlinks json и apple-app-site-association доступны по правильным адресам.