Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Swift : deep linking, universal links, URL schemes, iOS, app navigation

Что такое диплинки и как они настраиваются в iOS-приложении?

Вопрос проверяет понимание механизма диплинков (deep links) в iOS-приложении, их назначения для навигации пользователей извне в конкретные разделы приложения.

Короткий ответ

Диплинки (deep links) — это специальные ссылки, которые открывают не просто приложение, а конкретный экран или контент внутри него. В iOS есть два основных типа: кастомные URL-схемы (например, myapp://profile) и универсальные ссылки (Universal Links) — обычные HTTPS-ссылки, которые привязаны к домену. Для настройки нужно добавить схему в Info.plist, обработать URL в AppDelegate/SceneDelegate, а для Universal Links — разместить на сервере специальный файл apple-app-site-association и настроить домен в Capabilities проекта. Это позволяет пользователям переходить из писем, браузера или других приложений прямо в нужное место вашего приложения.

Длинный ответ

Диплинки (deep links) — это механизм, позволяющий открывать мобильное приложение и сразу переходить на определённый экран или выполнять конкретное действие, используя специальную ссылку. Это критически важно для улучшения пользовательского опыта, так как связывает веб-контент, уведомления или другие приложения с вашим нативным приложением.

Типы диплинков в iOS

В iOS существует два основных подхода:

  • Кастомные URL-схемы (Custom URL Schemes): Ссылки вида myapp://profile?id=123. Они просты в настройке, но не являются стандартными HTTP-ссылками и могут конфликтовать с другими приложениями, использующими ту же схему.
  • Универсальные ссылки (Universal Links): Это обычные HTTPS-ссылки (например, https://example.com/profile/123), которые iOS может ассоциировать с вашим приложением. Они более безопасны и приоритетны: если приложение установлено, ссылка откроет его; если нет — откроется веб-сайт.

Настройка кастомной URL-схемы

Для настройки кастомной схемы нужно:

  1. Добавить схему в Info.plist файл проекта.
  2. Обработать входящий URL в методах application(_:open:options:) (AppDelegate) или scene(_:openURLContexts:) (SceneDelegate).

Пример добавления схемы в Info.plist:

<key>CFBundleURLTypes</key>
<array>
  <dict>
    <key>CFBundleURLSchemes</key>
    <array>
      <string>myapp</string>
    </array>
  </dict>
</array>

Пример обработки в AppDelegate:

func application(_ app: UIApplication,
                 open url: URL,
                 options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
    guard url.scheme == "myapp" else { return false }
    // Извлекаем путь и параметры
    if url.host == "profile", let queryItems = URLComponents(url: url, resolvingAgainstBaseURL: false)?.queryItems {
        let userId = queryItems.first(where: { $0.name == "id" })?.value
        // Навигация к экрану профиля с userId
        navigateToProfile(with: userId)
        return true
    }
    return false
}

Настройка Universal Links

Настройка сложнее, но обеспечивает лучший опыт:

  1. Включите Associated Domains в Capabilities вашей цели в Xcode и добавьте домен в формате applinks:yourdomain.com.
  2. На вашем веб-сервере по адресу https://yourdomain.com/.well-known/apple-app-site-association разместите JSON-файл (без расширения .json), который связывает пути с идентификатором вашего приложения.
  3. Обработайте ссылку в методе application(_:continue:restorationHandler:) или соответствующем методе SceneDelegate.

Пример файла apple-app-site-association:

{
  "applinks": {
    "apps": [],
    "details": [
      {
        "appID": "TEAMID.com.yourapp.bundle",
        "paths": [ "/profile/*", "/news/*" ]
      }
    ]
  }
}

Пример обработки Universal Link:

func application(_ application: UIApplication,
                 continue userActivity: NSUserActivity,
                 restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
    guard userActivity.activityType == NSUserActivityTypeBrowsingWeb,
          let incomingURL = userActivity.webpageURL else {
        return false
    }
    // Парсим URL и навигируем
    handleIncomingUniversalLink(incomingURL)
    return true
}

Вывод: Используйте кастомные URL-схемы для простых внутренних сценариев или когда у вас нет контролируемого домена. Universal Links — предпочтительный и более надёжный способ для публичных ссылок, так как они интегрируются с экосистемой iOS (Safari, Messages) и обеспечивают плавный переход между веб-сайтом и приложением.

  • Аватар

    iOS Guru

    Roman Isakov

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    4

  • Сложность:

    5

Навыки

  • Swift

    Swift

  • IOS

    IOS

Ключевые слова

#deep linking

#universal links

#URL schemes

#iOS

#app navigation

Подпишись на iOS Developer в телеграм

  • Аватар

    iOS Guru

    Roman Isakov

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.