> Что такое диплинкинг в iOS (iOS, Swift)
Уровень: junior · Роль: mobile · Категория: Технические вопросы
Компании: bnine
Стек: iOS, Swift
> Пример ответа
Короткий ответ
Диплинкинг (deep linking) в iOS - это механизм, который позволяет открывать конкретный экран или выполнять определённое действие внутри приложения по ссылке, минуя главный экран. Ссылка может быть обычной URL-схемой (например, myapp://profile/123) или универсальной ссылкой (Universal Link), ведущей на ваш домен. iOS передаёт ссылку в приложение, а вы обрабатываете её и навигируете пользователя в нужное место.
Подробное объяснение
В iOS есть два основных способа реализации диплинкинга:
URL Scheme - вы регистрируете кастомную схему (например, myapp://). Когда система встречает такую ссылку, она открывает ваше приложение и передаёт полный URL в метод application(_:open:options:) в AppDelegate или через onOpenURL в SwiftUI. Минус - схема не уникальна, другая app может зарегистрировать такую же.
Universal Links - вы привязываете домен к вашему приложению через файл apple-app-site-association, размещённый на сервере. Ссылка вида https://example.com/profile/123 открывает приложение, если оно установлено, иначе - сайт. Это более безопасный и рекомендуемый Apple подход.
Обработка диплинка обычно включает:
- парсинг URL (путь, query-параметры);
- определение целевого экрана или действия;
- навигацию (например, через
NavigationStackилиUINavigationController); - обработку случая, когда приложение ещё не запущено или находится в фоне.
На практике
Для junior-позиции важно понимать разницу между URL Scheme и Universal Links, уметь обрабатывать ссылку в AppDelegate и в SwiftUI, а также знать, как передать данные на нужный экран. Часто диплинкинг используется для:
- push-уведомлений (переход по тапу на уведомление);
- email-рассылок и QR-кодов;
- шеринга контента между пользователями.
На практике вам могут дать задачу: "Реализуй обработку ссылки, которая открывает экран профиля с переданным ID". Нужно будет распарсить URL, извлечь ID и передать его в view model или напрямую во view.
Пример кода
Пример обработки Universal Link в SwiftUI:
SWIFT@mainstruct MyApp: App {var body: some Scene {WindowGroup {ContentView().onOpenURL { url inhandleDeepLink(url)}}}func handleDeepLink(_ url: URL) {guard url.host == "example.com" else { return }let pathComponents = url.pathComponentsif pathComponents.count > 1, pathComponents[1] == "profile" {let userID = pathComponents[2]// навигация на экран профиля с userID}}}
Для URL Scheme в AppDelegate:
SWIFTfunc application(_ app: UIApplication,open url: URL,options: [UIApplication.OpenURLOptionsKey: Any] = [:]) -> Bool {if url.scheme == "myapp", url.host == "profile" {let userID = url.lastPathComponent// навигацияreturn true}return false}
Как отвечать на собеседовании
Начните с определения, затем кратко опишите два подхода. Упомяните, что Universal Links предпочтительнее из-за безопасности и уникальности. Приведите простой пример обработки. Если спросят про сложные сценарии - скажите, что можно использовать координатор или роутер для централизованной обработки всех ссылок. Не углубляйтесь в детали, если не просят.
Что проверяет интервьюер
- Понимание базовых концепций навигации в iOS.
- Знание
AppDelegatelifecycle и SwiftUI environment. - Умение парсить URL и извлекать параметры.
- Понимание разницы между URL Scheme и Universal Links.
- Способность объяснить, как передать данные между экранами.
Типичные ошибки
- Путаница между URL Scheme и Universal Links.
- Игнорирование случая, когда приложение уже запущено (нужно обрабатывать
onOpenURL, а не толькоdidFinishLaunching). - Необработка ошибок парсинга (например, отсутствие ID в ссылке).
- Попытка использовать диплинкинг для внутренней навигации вместо обычных переходов.
- Забывают про
apple-app-site-associationи проверку домена для Universal Links.
> Похожие задачи по mobile
В чем разница между actors и менеджером памяти с пулом объектов в Swift?
Как понять, что файл на сервере изменился при сохранении имени и пути?
Что такое паттерн use case
Что выведется в консоли при вызове двух одинаковых функций в протоколе с табличной диспетчеризацией
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью