Как добавить Deep Link в приложение
Комментарии (2)
Ответ сгенерирован нейросетью и может содержать ошибки
Как добавить Deep Link в приложение
Deep Link (или URI-ссылка) — это механизм, позволяющий открывать определенные экраны или выполнять действия в Android приложении напрямую из внешних источников: веб-страниц, других приложений, push-уведомлений или поисковых систем. Реализация состоит из нескольких ключевых этапов: объявления ссылок в манифесте, обработки входящих Intent'ов в Activity и создания корректных URI-шаблонов.
1. Определение Deep Link в AndroidManifest.xml
Основной шаг — объявить Intent Filter для нужной Activity в файле AndroidManifest.xml. Фильтр должен содержать схему (scheme), домен (host) и путь (path) или паттерн пути (pathPattern/pathPrefix).
<activity android:name=".ProductDetailActivity">
<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="myapp.example.com"
android:pathPrefix="/product" />
</intent-filter>
<!-- Альтернативный пример с кастомной схемой (app://) -->
<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="app"
android:host="products"
android:pathPattern="/.*" />
</intent-filter>
</activity>
Ключевые элементы:
action VIEW— указывает, что Activity может просматривать данные.category BROWSABLE— позволяет открывать ссылки из браузера.data— описывает структуру URI. Использованиеhttpsрекомендуется для лучшей совместимости с современными системами (Android App Links).
2. Обработка входящего Intent в Activity
После объявления фильтра, необходимо обработать входящий Intent в целевой Activity. Данные URI извлекаются через Intent.getData().
class ProductDetailActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_product_detail)
handleDeepLink(intent)
}
override fun onNewIntent(intent: Intent?) {
super.onNewIntent(intent)
handleDeepLink(intent)
}
private fun handleDeepLink(intent: Intent?) {
val uri = intent?.data
if (uri != null) {
// Пример: https://myapp.example.com/product?id=123
val productId = uri.getQueryParameter("id")
if (productId != null) {
// Загружаем и отображаем данные продукта
loadProductDetails(productId)
} else {
// Обработка некорректной ссылки
showError("Invalid deep link")
}
}
}
private fun loadProductDetails(id: String) {
// Логика загрузки данных (например, из API или базы)
}
}
Важно обрабатывать и onCreate() (первое открытие), и onNewIntent() (если Activity уже создана и получает новый Intent).
3. Тестирование и валидация Deep Links
Для проверки работоспособности можно использовать ADB (Android Debug Bridge):
adb shell am start -W -a android.intent.action.VIEW -d "https://myapp.example.com/product?id=456" com.example.myapp
Или создать тестовую веб-страницу с ссылкой:
<a href="https://myapp.example.com/product?id=789">Open Product in App</a>
Для Android App Links (верифицированных HTTPS ссылок) требуется дополнительная настройка Digital Asset Links для подтверждения владения доменом и предотвращения перехвата ссылок другими приложениями.
4. Рекомендации и лучшие практики
- Валидация данных: всегда проверяйте параметры URI на корректность (наличие, тип, диапазон значений).
- Fallback обработка: если приложение не установлено, HTTPS ссылки могут открыть веб-версию. Для этого нужна соответствующая веб-страница.
- Логирование: добавляйте логи для анализа использования Deep Links.
- Безопасность: не доверяйте данным из ссылок без проверки, особенно в финансовых или приватных сценариях.
Таким образом, добавление Deep Link включает декларативную часть (манифест) и программную обработку (Activity). Этот механизм значительно улучшает пользовательский опыт, позволяя seamlessly интегрировать приложение в экосистему Android и веб.