mobile-qachecklists

Deep linking в мобильном приложении: что и как тестировать

Deep link — URL, который открывает мобильное приложение на конкретном экране. Используется в push-уведомлениях, email-кампаниях, рекламе, шеринге контента. Звучит просто, но реальных кейсов десятки — каждый вариант надо проверять отдельно.

Состояния приложения

Killed (cold start): приложение убито swipe’ом. Тап на deep link → приложение запускается с нуля, должно открыться на нужном экране, не на splash → home → нужный экран. — Background: приложение свёрнуто. Тап на deep link → приложение разворачивается на нужный экран, состояние сохранено. — Foreground: приложение открыто. Deep link → переход на нужный экран без перезагрузки. — Foreground на том же экране: уже там — должен быть refresh данных, не повторная навигация.

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 дней. При тестировании всегда переустанавливай приложение перед проверкой, иначе тестируешь старую конфигурацию.