intent: URI (Android)
URI-схема Android для запуска конкретной Activity приложения из ссылки или QR-кода, с поддержкой fallback на Google Play, если приложение не установлено.
Структура intent: URI
intent: URI — это Android-специфичная схема для запуска Activity приложения напрямую из браузера, QR-кода или email. Её описал Google в документации к Chrome для Android как альтернативу классическим кастомным схемам вида myapp://. Главное отличие: intent: URI можно передавать точный package приложения, компонент Activity и произвольные extras — всё то, что внутри приложения передаётся через объект Intent.
Базовый формат выглядит так:
intent://путь/#Intent;scheme=https;package=ru.example.app;end
Разбор по частям: intent:// — обязательный префикс схемы; путь/ — произвольный путь, доступный через getData() внутри Activity; #Intent; — фиксированный разделитель начала параметров; scheme=https — схема, которую приложение будет видеть как исходную; package= — полное имя пакета (единственный надёжный способ адресации); end — обязательный завершитель. Дополнительно можно указать component= для конкретного класса Activity, S.extra_key=value для строковых extras и B.extra_key=true для булевых.
Fallback на Play Store
Самый важный параметр в реальных кампаниях — S.browser_fallback_url. Если приложение не установлено, Chrome Android не выбрасывает ошибку, а открывает указанный URL. Типичная схема:
intent://product/42#Intent;scheme=https;package=ru.example.app;S.browser_fallback_url=https%3A%2F%2Fplay.google.com%2Fstore%2Fapps%2Fdetails%3Fid%3Dru.example.app;end
Пользователь сканирует QR-код. Если приложение есть — открывается экран товара с id 42. Если нет — Chrome переходит на страницу в Play Store. После установки приложение запускается с чистой главной страницей: deferred deep link intent: URI не поддерживает, для этого нужны сервисы типа Firebase Dynamic Links или AppsFlyer.
Обратите внимание: browser_fallback_url должен быть закодирован через percent-encoding. Незакодированные амперсанды и знаки вопроса сломают парсер параметров.
Где использовать intent: URI
Схема работает только в Chrome для Android и основанных на нём браузерах (Samsung Internet, Edge Mobile). Firefox Android обрабатывает её иначе, Safari на iOS не понимает совсем. Поэтому intent: URI оптимален для строго Android-аудитории, например в push-рассылках через Firebase, QR-кодах на Android-устройствах в розничных магазинах или в Android-приложениях при запуске Activity другого приложения.
Для кросс-платформенных сценариев правильнее использовать App Links (HTTPS с assetlinks.json) или связку динамических QR-кодов с сервером Smart Routing, который определяет ОС и отдаёт нужную ссылку: intent: URI для Android, Universal Link для iOS.
Типичные применения intent: URI на практике: запуск банковского приложения с предзаполненной формой платежа, открытие карточки товара в маркетплейсе, переход на онбординг-экран после скана QR на коробке с продуктом.
Частые вопросы
Чем intent: URI отличается от обычной кастомной схемы myapp://?
Кастомная схема myapp:// не содержит информации о пакете — Android выбирает приложение через Intent disambiguation dialog, если несколько приложений объявили один и тот же scheme. intent: URI позволяет явно указать package=, поэтому система запускает строго нужное приложение. Кроме того, intent: поддерживает параметр browser_fallback_url для плавного редиректа на Play Store, тогда как при отсутствии обработчика кастомной схемы браузер просто показывает ошибку «адрес не поддерживается».
Работает ли intent: URI в WebView внутри приложений?
Зависит от настроек WebView. По умолчанию WebView не обрабатывает intent: URI — нужно переопределить shouldOverrideUrlLoading и вручную вызвать Intent.parseUri(). Если этого не сделать, пользователь увидит ошибку «page not found». Большинство встроенных браузеров (Telegram, Instagram) ведут себя так же. Это главная причина, по которой для широкой аудитории лучше использовать HTTPS App Links вместо intent:.
Можно ли зашить intent: URI в QR-код?
Да, технически можно. Но строка intent: URI с полным набором параметров длинная, а значит QR-код будет плотным и его сложнее сканировать. Практичнее зашить в QR короткую HTTPS-ссылку через короткий URL, а на сервере настроить редирект на intent: URI для Android и Universal Link для iOS. Пользователь видит короткий QR, а маршрутизация происходит по User-Agent на серверной стороне.
Как проверить корректность intent: URI перед публикацией?
Самый быстрый способ — открыть ссылку в Chrome Android через ADB: adb shell am start -a android.intent.action.VIEW -d "intent://...". Другой вариант — создать HTML-файл с <a href="intent://..."> и открыть его на устройстве. Проверяйте три сценария: приложение установлено и запускается нужная Activity; приложение установлено, но Activity не найдена; приложение не установлено и срабатывает fallback_url.
Работает ли intent: URI на iOS?
Нет. iOS не поддерживает схему intent: — это специфика Android и Chrome. На iPhone нужно использовать Universal Links или кастомные схемы с обработкой в LSApplicationQueriesSchemes. Именно поэтому при размещении intent: URI в QR-коде или на веб-странице необходимо либо добавить fallback_url с редиректом на App Store, либо использовать серверную маршрутизацию по платформе.