## Deeplink

Deeplink — ссылка, которая служит навигацией внутри приложения/веб-сайта: ссылка непосредственно на содержимое продукта, а не на домашнюю страницу.

![DeeplinkScheme](/pictures/IosDevTools/DeeplinkScheme.png?raw=true)

Пример: chrome://flags - Browser(chrome)-specific URI Scheme

### deeplink Facebook

[URL-адрес](/2%20ComputerScience/2.3%20Networking/2.3.1%20API/2.3.1.3%20URI\URL\URN.md) `fb://` должен бы открыть приложение Facebook, но `fb://profile/33138223345` открывает профиль Википедии в приложении Facebook.

P.S.: работает только на macOS

Данная ссылка открывает бинарный файл приложения `AddressBookUrlForwarder.app`, которое используется для извлечения контактных данных Facebook и Twitter для отображения в адресной книге.5

Также приложение является обработчиком [URL](/2%20ComputerScience/2.3%20Networking/2.3.1%20API/2.3.1.3%20URI\URL\URN.md) для этих выражений `strings /System/Library/CoreServices/AddressBookUrlForwarder.app/Contents/MacOS/AddressBookUrlForwarder`:

```
fb://profile/(.*)
http://www.facebook.com/profile.php?id=$1
twitter:///user[?]screen_name=(.+)
http://twitter.com/$1
twitter:///post[?]message=(.+)
http://twitter.com/share?text=$1
```

Именно из-за обработки `deeplink` приложением `AddressBookUrlForwarder` редирект работает из коробки на MacOS. В наши собственные приложения необходимо самостоятельно конфигурировать `deeplink`.

### Обработка deeplink внутри iOS приложения

Внутри приложения `deeplink` можно обрабатывать, реализуя специальный метод UIApplicationDelegate делегата приложения:


```swift
// ⭐️ - 9.2) deeplink (Пример: hrplatform:///platform/support/pages/profile/7905)
func application(
_ app: UIApplication,
open url: URL,
options: [UIApplication.OpenURLOptionsKey: Any] = [:]
) -> Bool
```

 На рисунке это 9.2 метод:

![AppMethodLifeCycleWithUniversalLink](/pictures/IosDevTools/AppMethodLifeCycleWithHelper.jpg?raw=true)


iOS вызовет 9.2 метод и описанную реализацию дальнейшего потока приложения при нажатии Deeplink служит навигации внутри приложения: из историй/предложений банка/умного поиска/виджетов на экранах/по кнопкам и другим элементам.

### Deeplink vs [Universal Links](./4.2.2.3%20UniversalLinks.md)

1) Установка приложения
* Универсальные ссылки устраняют необходимость установки приложения и предлагают более плавный путь; 
* Deeplink не будут работать без предустановленного приложения

2) Разные методы внутри UIApplicationDelegate
* Универсальные ссылки - `application:continueUserActivity:restorationHandler:` метод;
* Deeplink - `open url: URL` метод;

3) Поиск в Xcode
* Универсальные ссылки - Scheme - Signing & Capabilities - Associated Domains - applinks:...; 
* Deeplink - Scheme - Info - URL Types - URL schemes;

4) Безопасность
* Универсальные ссылки - имеют SSL сертификат;
* Deeplink - не имеют

---

[4.2.2.1 Router vs Coordinator Theme](./4.2.2.1%20RoutervsCoordinator.md) | [Back To iTWiki Contents](https://github.com/eldaroid/iTWiki) | [4.2.2.3 Universal Link Theme](./4.2.2.3%20UniversalLinks.md)