Любая «шпаргалка по URL-схемам» в топе поиска написана несколько лет назад, и половина того, что она перечисляет, уже ничего не открывает. Ссылка, построенная по вчерашнему паттерну fb://profile/<username>, скопированному из поста, который был точным на момент написания, сегодня Facebook не откроет. Схемы, которые всё ещё работают, — гораздо более короткий список, чем те, что до сих пор копируют, и разница имеет значение, потому что сломанная схема не выдаёт ошибку. Она просто ничего не делает или скатывается в браузер.
Именно это поведение с тихим сбоем и делает таблицу ниже стоящей того, чтобы держать её актуальной, а не полагаться на память. Неверная запись схемы не бросает ошибку, которую разработчик поймал бы на тестировании; она просто не разрешается, и на устройстве, где приложение-цель случайно установлено, а посетитель случайно оказывается где-то приемлемом, сломанный rewrite может оставаться незамеченным месяцами.
Подтверждённо рабочие, и как построен каждый
Семь rewrite подтверждены как рабочие:
| HTTPS-ссылка | Собственная схема | Примечание |
|---|---|---|
https://t.me/<bot>?start=<payload> | tg://resolve?domain=<bot>&start=<payload> | |
https://t.me/<channel> | tg://resolve?domain=<channel> | |
https://instagram.com/<username> | instagram://user?username=<username> | |
https://facebook.com/profile.php?id=<n> | fb://profile/<n> | нужен числовой id, см. ниже |
https://open.spotify.com/track/<id> | spotify:track:<id> | через двоеточие, не через слэш |
https://twitch.tv/<channel> | twitch://stream/<channel> | |
https://twitch.tv/<ch>/v/<id> | twitch://video/v<id> | префикс v перед id обязателен |
Telegram. И ссылка на бота, и ссылка на канал маппятся на tg://resolve: параметр domain несёт юзернейм бота или канала, а start — любой payload, который вы передаёте. Один и тот же rewrite обрабатывает и обычную ссылку на канал, и ссылку на бота с payload, разница лишь в том, присутствует ли start.
Instagram. instagram://user?username=<username> — это прямая замена юзернейма на юзернейм, числовой id не нужен. Это единственный профильный deep link в этой таблице, который обходит проблему с идентификатором, описанную дальше.
Facebook. Замена fb://profile/<n> выглядит так же прямой, но работает только если у вас уже есть числовой id. Одного юзернейма для этого недостаточно, и причина — ниже.
Spotify и Twitch. Оба используют собственную схему исключительно как резолвер для content id, уже присутствующего в https-URL, без шага поиска и без конвертации формата — просто другой конверт вокруг того же идентификатора. Режим сбоя для обоих — синтаксис, а не разрешения. Перепутайте двоеточие или префикс v, и ссылка будет malformed, а не просто неподдерживаемой.
Пара с Twitch, поставленная рядом, показывает, почему синтаксическая деталь весит больше, чем кажется. Ссылка на стрим, https://twitch.tv/<channel>, переписывается в twitch://stream/<channel> — прямая замена. Ссылка на VOD, https://twitch.tv/<channel>/v/<id>, переписывается в twitch://video/v<id>, где сам id обретает v, которого не было в исходном URL. Скопируйте паттерн для стрима на VOD-ссылку и уроните этот префикс — и получившаяся схема будет ссылаться на id, которого не существует, а не просто окажется malformed на уровне синтаксиса.
У настоящей схемы TikTok есть ловушка прямо рядом
iOS-схема TikTok — snssdk1233, названная именно так в собственной SDK-документации TikTok. Ловушка — snssdk1128. Это Douyin, другое приложение из другого стора, и два идентификатора достаточно близки в скопированном списке, чтобы перепутать их было лёгкой и незаметной ошибкой. Ссылка, построенная на неправильном из них, TikTok не откроет. Если у посетителя случайно установлен Douyin, она откроет совсем другое приложение.
Подтверждённо отсутствующие, словами самих вендоров
У следующих нет рабочей схемы, и у каждого — причина, названная самим вендором, а не необъяснённый пробел:
| Приложение | Почему нет схемы, которую можно использовать |
|---|---|
| X | Нет поддерживаемых URL-схем. Существует deep link для составления DM, но он требует ручной отправки и платного уровня Account Activity API, а этот API выводят из употребления. |
| LINE | Убрал line:// в собственной документации, специально чтобы предотвратить takeover-атаки, при которых запускается не то приложение. |
| В собственном центре помощи прямо говорит, что не публикует шаблоны для третьих сторон. | |
| YouTube | Актуальная документация Google говорит, что Universal Links уже открывают приложение на iOS 9+, и не документирует схему. |
| Snapchat | В полном перечне продуктов платформы для разработчиков нет ни одного messaging- или chat API. |
Его механизм payload — это QR scene_id, а не кликабельная ссылка. | |
| Не документирует схему. |
Две проблемы с идентификатором, а не один баг
Facebook и Instagram проваливаются по одной и той же причине, только с противоположных сторон.
fb://profile/ требует числовой id, а не юзернейм, и Graph API прямо отказывается искать по юзернейму, возвращая ошибку #803. Если у вас есть только юзернейм, поддерживаемого пути к числовому id, которого требует схема, нет.
У Instagram — зеркальная проблема. URL поста или reels несёт shortcode, а схема требует внутренний числовой media id, и shortcode не конвертируется в него никаким задокументированным путём. Две разные платформы, два разных направления, одна и та же форма сбоя: идентификатор, который даёт публичный URL, — не тот идентификатор, которого хочет схема.
Практическое следствие одинаково для обоих: числовой id нужно захватить и сохранить в тот момент, когда он действительно доступен, а не выводить на лету из юзернейма или shortcode, по которым вы ведёте routing. Правило rewrite, которое предполагает, что сможет конвертировать одно в другое в момент клика, строится на пути поиска, которого не существует.
Почему список короткий и остаётся коротким
Стоит назвать эту закономерность прямо. Узкое покрытие на iOS выше — по большей части осознанный выбор самих вендоров, а не пробел в чьей-то реализации. LINE убрал line:// намеренно, ссылаясь на риск takeover. Документация YouTube указывает на Universal Links как замену, а не на отсутствующую функцию. Pinterest прямо говорит, что не будет публиковать шаблоны схем для третьих сторон. Читать сокращающийся список схем как серию провалов реализации — значит неправильно понимать, что на самом деле происходит. Это скоординированный переход к Universal Links, и для вендоров на отсутствующей стороне этой таблицы он по большей части уже завершён.
Эта формулировка важна для того, как вы планируете вокруг этого списка. Схема, которой нет сегодня, потому что вендор осознанно вывел её из употребления, — не кандидат на повторное обнаружение в следующем квартале так, как это возможно для незадокументированного пробела. Стройте логику routing так, чтобы таблица отсутствующих воспринималась как устоявшееся состояние для каждого вендора, а не список, который стоит и дальше прощупывать.
Когда схемы нет, fallback тоже не нейтрален
Для приложений без рабочей схемы практический fallback — ссылка на стор:
iOS: https://apps.apple.com/app/id<numeric id>
Этот числовой id не угадать, и для нескольких приложений он вообще никуда полезного не ведёт. Microsoft вывел потребительский Skype из употребления в мае 2025 года, поэтому листинга, на который можно сослаться, больше не существует. Приложение также может оставаться вполне устанавливаемым на Android, когда его листинг на iOS уже исчез — и тогда запись действительна на одной платформе, а store fallback на другой становится мёртвым грузом. У Shopee нет единой глобальной страницы в сторе, поэтому store fallback направил бы десять из одиннадцати рынков на листинг не той страны. Пропустить fallback и отправить всех на веб-страницу — более правильное поведение именно здесь, а не компромисс.
Таблица схем — только половина проблемы routing. Вторая половина — знать, когда store fallback действительно помогает, а когда он просто добавляет мёртвую ссылку с большей уверенностью, чем заслуживает. Слой редиректа DarkCore трактует строки схем и store fallback как данные, а не захардкоженные допущения, именно потому, что эта таблица не стоит на месте.
Держите этот список актуальным, а не заученным
Каждая строка выше — это rewrite, который собственные системы вендора принимают сегодня, в 2026 году, а не паттерн, который когда-то работал. Таблица отсутствующих так же актуальна. Каждая причина — заявленная позиция вендора, а не допущение, вписанное потому, что никто не смог найти документацию. Относитесь к обеим половинам как к скоропортящимся. Вендор, переходящий с собственной схемы на Universal Links, как уже сделали YouTube и LINE, не рассылает уведомление о deprecation каждому сайту, скопировавшему его старый паттерн.
Перепроверяйте по актуальной документации самого вендора, прежде чем rewrite попадёт в конфиг routing, который будет работать без присмотра месяцами, а не по первой попавшейся шпаргалке из поиска. Семь rewrite и семь отсутствий выше — те, за которыми стоит источник на момент написания; всё остальное принадлежит к корзине «неизвестно», пока и у него не появится источник.
FAQ
Заработает ли когда-нибудь fb://profile/<username>?
Нет, и не из-за того, как построена схема. Graph API возвращает ошибку #803 на поиск по юзернейму. Поддерживаемого способа добраться от юзернейма до числового id, которого требует схема, нет.
Есть ли у TikTok эквивалент схемы на Android?
Android вообще не использует этот механизм схем. Deep links там разрешаются через таргетинг пакета intent:// — другую цепочку, чем та, которую покрывает эта таблица.
Почему в этой таблице нет WhatsApp или Messenger?
Эта таблица покрывает приложения, доступные через переписанную собственную схему на iOS. Выживает ли идентификатор клика при переходе в messaging-приложение — отдельный вопрос со своими условиями, и он не подчиняется тому же делению «работает/отсутствует», что и открытие самого приложения.