Deep linking в мобильном приложении: что и как тестировать
Deep link — URL, который открывает мобильное приложение на конкретном экране. Используется в push-уведомлениях, email-кампаниях, рекламе, шеринге контента. Звучит просто, но реальных кейсов десятки — каждый вариант надо проверять отдельно.
Состояния приложения
— Killed (cold start): приложение убито swipe’ом. Тап на deep link → приложение запускается с нуля, должно открыться на нужном экране, не на splash → home → нужный экран. — Background: приложение свёрнуто. Тап на deep link → приложение разворачивается на нужный экран, состояние сохранено. — Foreground: приложение открыто. Deep link → переход на нужный экран без перезагрузки. — Foreground на том же экране: уже там — должен быть refresh данных, не повторная навигация.
Типы deep links
— Custom URL scheme (myapp://product/123) — старый формат. Работает, но не проксимен с web (нельзя открыть в браузере).
— Universal Links (iOS) / App Links (Android) — HTTPS-URL, который при наличии приложения открывает его, при отсутствии — fallback в браузер. Современный стандарт.
— Deferred deep linking — юзер ещё не установил приложение → кликает → попадает в стор → ставит → при первом запуске попадает на тот же экран. Сложно реализовать, ещё сложнее тестировать.
Чек-лист
✅ Авторизованный экран без логина: deep link на профиль, юзер вышел → должен быть flow «логин → потом deep-link», не «home».
✅ Контент удалён: deep link на товар который удалили → понятный fallback с сообщением, не белый экран.
✅ Срок истёк: акция/event закончились → информативное сообщение, не «404».
✅ Невалидный URL: myapp://invalidpath → не падает, fallback на home.
✅ Параметры: myapp://product?id=abc где id ожидается числом → graceful error.
✅ Несколько link’ов подряд: deep link → deep link до полной загрузки → не падает.
✅ Cross-app linking: тап в чате → нативный share dialog → выбор стороннего приложения. Содержимое корректно передалось.
Инструменты
— iOS симулятор: xcrun simctl openurl booted "myapp://product/123" — открывает deep link.
— Android emulator: adb shell am start -a android.intent.action.VIEW -d "myapp://product/123".
— Universal Links отладка iOS: Settings → Developer → Universal Links → можно проверить какие домены ассоциированы.
Подводный камень
Universal Links кэшируются iOS. Если изменился apple-app-site-association на сервере, старая версия может кэшироваться до 7 дней. При тестировании всегда переустанавливай приложение перед проверкой, иначе тестируешь старую конфигурацию.