Полное руководство по Universal Links
Все, что нужно знать о universal links, deep links и app links для iOS и Android
Содержание
Что такое Universal Links?
Universal links — это URL, которые бесшовно работают между вебом и мобильными приложениями. Когда пользователь нажимает universal link на iOS-устройстве, система проверяет, установлено ли приложение, которое умеет обрабатывать такую ссылку. Если приложение установлено, открывается нужный контент в приложении. Если нет — ссылка открывается в Safari.
На Android аналогичная технология называется App Links. Концепция та же: один URL умно направляет пользователя либо в приложение, либо на сайт.
Ключевые преимущества
- Бесшовный UX без лишних промптов и редиректов
- Один URL работает на всех платформах
- Лучшая атрибуция и аналитика
- SEO-friendly формат (обычные HTTPS URL)
- Работают в email, SMS, соцсетях и любых других каналах
Как работают Universal Links
Процесс включает три ключевых компонента:
Файл Apple App Site Association (AASA)
JSON-файл на вашем домене по пути /.well-known/apple-app-site-association, который сообщает iOS, какие приложения могут обрабатывать ваш домен.
Конфигурация приложения
Приложение должно быть настроено на обработку определенных доменов и URL-шаблонов через entitlements (iOS) или intent filters (Android).
Код обработки URL
Приложение должно принимать deep link URL и открывать нужный экран или контент.
Реализация Universal Links на iOS
Шаг 1: Создайте AASA-файл
Создайте файл с именем apple-app-site-association (без расширения) со следующей структурой: apple-app-site-association
{
"applinks": {
"apps": [],
"details": [
{
"appID": "TEAMID.com.yourcompany.yourapp",
"paths": [
"/products/*",
"/articles/*",
"/user/*"
]
}
]
}
}Важно
Файл должен раздаваться по HTTPS с валидным SSL-сертификатом и возвращать заголовок Content-Type: application/json.
Шаг 2: Настройте iOS-приложение
В Xcode добавьте capability Associated Domains с вашим доменом:
applinks:yourdomain.com
applinks:www.yourdomain.comШаг 3: Обработайте URL в приложении
// AppDelegate.swift
func application(_ application: UIApplication,
continue userActivity: NSUserActivity,
restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
guard userActivity.activityType == NSUserActivityTypeBrowsingWeb,
let url = userActivity.webpageURL else {
return false
}
// Handle the URL and navigate to appropriate screen
handleUniversalLink(url)
return true
}Реализация App Links на Android
Шаг 1: Создайте assetlinks.json
Разместите этот файл по адресу https://yourdomain.com/.well-known/assetlinks.json:
[{
"relation": ["delegate_permission/common.handle_all_urls"],
"target": {
"namespace": "android_app",
"package_name": "com.yourcompany.yourapp",
"sha256_cert_fingerprints": [
"XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX"
]
}
}]Шаг 2: Обновите AndroidManifest.xml
<activity android:name=".MainActivity">
<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:scheme="https" />
<data android:host="yourdomain.com" />
<data android:pathPrefix="/products" />
</intent-filter>
</activity>Шаг 3: Обработайте Intent
// MainActivity.kt
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val action = intent.action
val data = intent.data
if (Intent.ACTION_VIEW == action && data != null) {
// Handle the deep link
handleDeepLink(data)
}
}Лучшие практики и частые ошибки
Что делать
- ✅ Всегда используйте HTTPS для домена
- ✅ Тестируйте на реальных устройствах, а не только в симуляторах
- ✅ Настройте fallback URL для веб-пользователей
- ✅ Добавьте полноценную аналитику
- ✅ Корректно обрабатывайте edge cases
- ✅ Поддерживайте AASA/assetlinks файлы в актуальном состоянии
❌Чего не делать
- ❌ Не используйте редиректы для AASA/assetlinks файлов
- ❌ Не забывайте валидировать JSON-синтаксис
- ❌ Не хардкодьте логику навигации в приложении
- ❌ Не предполагаете, что приложение всегда установлено
- ❌ Не пропускайте тестирование на разных версиях ОС
Тестирование и отладка
Тестирование iOS
- 1. Используйте валидатор AASA
- 2. Тестируйте ссылки в Notes, Messages или Mail
- 3. Проверяйте логи в Xcode Console
- 4. Проверьте привязку домена в Settings → Developer
Тестирование Android
- 1. Используйте adb shell am start -a android.intent.action.VIEW -d "your-url"
- 2. Тестируйте в Chrome, Gmail и мессенджерах
- 3. Проверьте статус верификации через adb shell dumpsys package domain-preferred-apps
- 4. Мониторьте ошибки в logcat
Аналитика и атрибуция
Правильная аналитика критична для понимания эффективности universal links. Отслеживайте эти ключевые метрики:
- CTR из разных каналов
- Доля открытий приложения vs web fallback
- Стоимость привлечения по каналам
- Конверсия deep-linked контента
- Время до первого действия после deep link
- Производительность по платформам (iOS vs Android)
Совет
Используйте smart link платформу вроде Appy для автоматической обработки universal links, аналитики и fallback-логики. Это экономит недели разработки и дает enterprise-grade инфраструктуру.
Попробовать Appy бесплатноВывод
Universal links — важная часть современных мобильных приложений. Они дают бесшовный UX, улучшают атрибуцию и надежно работают на разных платформах. Хотя внедрение требует внимания к деталям, преимущества в UX и аналитике стоят усилий.
Начните с базовой реализации, тщательно протестируйте и улучшайте решение по данным реальной эксплуатации. А если хотите избежать сложности — используйте Appy, который берет это на себя автоматически.
Полезные ресурсы Appy
Изучите инструменты Appy для universal links, deep links и QR-кодов, чтобы ускорить рост мобильного приложения.
- Universal Link Validator для проверки iOS Universal Links и Android App Links.
- Branded QR Code Generator для кампаний на установки и офлайн-воронок.
- Функции smart-ссылок включая deep links, правила маршрутизации и аналитику.
Продолжить изучение
Deep linking vs Universal Links: полное сравнение
Разберитесь в ключевых отличиях deep links и universal links, когда использовать каждый подход и как их внедрять.
Universal Links открывают Safari? Исправьте AASA, App Links, редиректы и headers
Практичный troubleshooting-процесс для исправления universal links и app links, открывающих браузер вместо приложения.
Закрытие Firebase Dynamic Links: руководство по миграции на Appy
Firebase Dynamic Links закрывается. Вот полное руководство по миграции на Appy с нулевым простоем.
Ищете другое? Посмотрите все темы в блоге Appy.
Без лишней сложности. Используйте Appy.
Appy автоматически обрабатывает universal links, deep links, QR-коды и аналитику. Без кода.