App Links (Android)
App Links — механизм Android, при котором обычная https-ссылка открывается сразу в приложении без диалога выбора, потому что приложение заранее подтвердило владение доменом.
Как приложение доказывает права на домен
Механизм появился в Android 6.0 Marshmallow. Приложение заявляет права на ссылки конкретного домена, система заявку проверяет и при совпадении отдаёт такие ссылки приложению сразу — без вопроса «чем открыть».
Заявка — в манифесте: intent-filter со схемой https, нужным host и атрибутом android:autoVerify="true". Ответная половина лежит на сайте — файл /.well-known/assetlinks.json. В нём перечислены имя пакета и отпечаток SHA-256 сертификата, которым подписано приложение. Файл отдаётся по https, с типом application/json и без редиректов; редирект — частая причина, по которой проверка молча не проходит.
Сверка идёт при установке и обновлении приложения. Совпало — домен закреплён за приложением. Не совпало (в файле ключ отладочной сборки, а магазинная подписана другим) — ссылка откроется в браузере. На Android 12 и новее статус проверки видно командой adb shell pm get-app-links для нужного пакета.
Отличие от myapp:// и от iOS
Кастомная схема вида myapp://product/42 — просто строка, которую приложение зарегистрировало за собой. Права на неё никто не проверяет, ту же схему способно занять второе приложение. Хуже другое: без установленного приложения открывать ссылку нечем — браузер покажет ошибку, а мессенджер нередко даже не сделает её кликабельной. Внутри приложения схемы работают, для внешних точек входа ненадёжны; общая механика — в термине диплинк.
В iOS ту же задачу решают Universal Links: тоже обычная https-ссылка и подтверждение через файл на сайте, только файл другой и правила свои. Адрес для обеих платформ общий, а файлов подтверждения на сайте два.
QR-коды и короткие ссылки
В QR-код кладут обычный https-адрес, а не myapp://. У человека с приложением откроется нужный экран, у остальных — веб-страница, где уместно предложить установку. Запасной сценарий получается сам собой, страница-прокладка не нужна: сгенерировать QR-код на такую ссылку можно за минуту.
С сокращателями тоньше. Решение принимается по домену, на который пришёл переход, поэтому цепочка «короткий домен → редирект → верифицированный домен» способна оставить пользователя в браузере. Если в печати и рассылках короткие адреса, верифицируйте и короткий домен: тот же assetlinks.json на нём, тот же host в манифесте. Параметры не теряются — utm-метки доезжают до приложения вместе с адресом.
Частые вопросы
Что такое App Links в Android простыми словами?
Это обычная https-ссылка, которую система открывает сразу в приложении, а не в браузере. Право на домен приложение подтверждает заранее: Android сверяет подпись приложения с файлом на сайте. Если подтверждения нет, ссылка открывается как веб-страница — пользователь в любом случае попадает по адресу.
Что нужно сделать, чтобы App Links заработали?
Две вещи. В манифест приложения добавить intent-filter на схему https и ваш домен с атрибутом autoVerify. На сайт выложить файл /.well-known/assetlinks.json с именем пакета и отпечатком SHA-256 того сертификата, которым подписана сборка в магазине. Файл отдаётся по https, без редиректов, с типом application/json.
Что произойдёт, если приложение не установлено?
Откроется сайт по тому же адресу — это и есть встроенный запасной сценарий. Определять устройство и разводить людей по платформам не нужно: одна ссылка обслуживает и тех, у кого приложение стоит, и тех, у кого его нет. На целевой странице обычно ставят кнопку установки из Google Play.
Чем App Links лучше схемы myapp://?
Кастомную схему никто не верифицирует: её может занять другое приложение, а без установленного приложения такая ссылка не открывается вообще — в QR-коде или сообщении это тупик. App Links — валидный https-адрес: он кликается везде, проверен системой, а при отсутствии приложения ведёт на сайт.
Почему ссылка открывается в браузере, хотя приложение установлено?
Чаще всего проверка не прошла: в assetlinks.json стоит отпечаток отладочного ключа вместо магазинного, файл отдаётся с редиректом или неверным типом, домен в манифесте не совпадает с доменом ссылки. Другой вариант — переход шёл через сократитель на чужом домене либо открытие ссылок отключено в настройках приложения.