Интенты в Android/iOS
Интент - это механизм обмена сообщениями между компонентами приложения или между разными приложениями, которое говорит системе: “Я хочу сделать вот это”, Android смотрит на сообщение и решает, кто это сделает: твой же Activity, Service, BroadcastReceiver или чужое приложение. Как пример - увидел классную статью и жмякаешь “Поделиться” и открывается выбор: Telegram, Gmail и тд или кликаешь на телефон на сайте - и сразу набирается номер Intents как “почтальон” Android Два главных типа интентов: Explicit и Implicit++ ++ 1. Explicit Intent (явные) - “Я точно знаю, кого зову” Ты указываешь точный класс компонента (Activity, Service и тд) Когда используем: - Переход между экранами внутри своего приложения (самый частый случай) - Запуск Service или BroadcastReceiver (механизм широковещательных сообщений: прила отправляет событие, а все заинтересованные получатели могут на него отреагировать) в своем же приложении
2. Implicit Intent (неявные) - “Кто-нибудь, сделайте это пожалуйста!” Ты указываешь действие, данные, категорию и Android сам ищет подходящее приложение Когда используем: - Открыть ссылку: ACTION_VIEW + Uri.parse(“https://hh.ru”) - Поделиться текстом: ACTION_SEND + EXTRA_TEXT - Сделать фото: ACTION_IMAGE_CAPTURE - Позвонить: ACTION_DIAL или ACTION_CALL - Открыть карту: ACTION_VIEW + geo:55.753210, 37.619055 Из плюсов - супер-гибко, пользователь сам выбирает любимое приложение Минусы: если нет подходящего приложения может крашнуться (поэтому всегда проверяй resolveActivity() или queryIntentActivities()). На Android 14+ и выше implicit-интенты доставляются только exported-компонентам - безопасность выше
//Не забываем проверять что обрабатывается кейс No Activity found to handle Intent - покажите тост “Установите браузер/карты/мессенджер”
Как устроено в iOS
1. На данный момент стандартом являются - Universal Links (эквивалент Android App Links / Implicit Intents с HTTPS) Это обычные HTTPS-ссылки (https://hh.ru/vacancy/12345), которые если приложение установлено, открывают его напрямую. Если нет, то открывается сайт в Safari - Из плюсов: идеальный UX- нет диалогов “открыть в приложении?”, просто открывается и если приложения нет, то плавный фоллбек на веб - Минусы: настройка сложнее, не все пути можно обрабатывать (ограничения на приватность)
2. Другие интентоподобные механизмы - Share Extensions - поделиться текстом/фото/URL (аналог ACTION_SEND) - Action Extensions - действия в Share Sheet - Document Interaction - открыть файл в другом приложении - Custom Activities - Handoff, продолжить на Mac - App Clips - легкие версии для быстрого запуска по NFC/QR (маленький размер, без установки)