# Документация по использованию Deep Links в приложении Haqq
Deep Links (Диплинки) позволяют создавать прямые ссылки на определенные функции или разделы в приложении Haqq, облегчая навигацию и повышая удобство использования приложения.
## Основные типы диплинков
В приложении Haqq используются следующие типы диплинков:
### 1. Haqq Префикс (`haqq:`)
- **Форматы:** `haqq://` или `haqq:`
- Пример: `haqq://enableDeveloperMode` и `haqq:enableDeveloperMode` выполняют одно и то же действие — активацию режима разработчика. Использование слеша (`/`) не влияет на функциональность.
- **Дополнительные примеры:**
- `haqq:provider:BASE64_JSON` - Добавляет новый провайдер сети. BASE64_JSON — это закодированная в base64 строка, содержащая информацию о сети в формате JSON.
- `haqq://wc?uri=...` - Для подключения Wallet Connect.
- `haqq://browser?uri=https://shell.haqq.network` - Открывает обычный браузер.
- `haqq://web3browser?uri=https://shell.haqq.network` - Открывает web3 браузер.
- `haqq:back9test:test_code` - Показывает алерт с кодом, указанным после `test_code`.
### 2. Ethereum Префикс (`ethereum:`)
- **Формат:** `ethereum:АДРЕС`
- Пример: `ethereum:0x37f61e7d9ce7dc6648ecbd3ba27972fb90d69cf1`
- Адреса, начинающиеся с префикса `ethereum:`, также поддерживаются в приложении и используются для взаимодействия с Ethereum сетью.
### 3. WalletConnect Префикс (`wc:`)
- **Формат:** `wc:`
- Предназначен для инициализации соединения через WalletConnect.
### 4. Dynamic Link
- **Формат:** `https://haqq.page.link/?link=URL&apn=ПАКЕТ&isi=ID&ibi=БАНДЛ`
Dynamic Link предназначены для выполнения специфических действий в приложении, например, показа нового баннера на главном экране, после перехода по ссылке.
#### Общая структура Dynamic Link
Базовая структура Dynamic Link для Firebase в приложении HAQQ Wallet выглядит так:
`https://haqq.page.link/?link=ENCODED_LINK&apn=com.haqq.wallet&isi=6443843352&ibi=com.haqq.wallet`
где `ENCODED_LINK` — это закодированный URL с нужными query параметрами **(web3_browser, browser, distinct_id)**, которые обрабатываются внутри приложения. далее ENCODED_LINK помещается в `link` параметр.
**Логика формирования ссылки**
1) Создаем URL для link параметра:
- ENCODED_LINK должен быть внесён в вайтлист в Firebase, чтобы ссылки работали корректно
- Формируем ENCODED_LINK с одним из параметров — browser, web3_browser, или distinct_id.
- Кодируем его с помощью encodeURIComponent для корректного использования в Dynamic Link.
2) Добавляем параметры query:
- apn — имя пакета приложения для Android: com.haqq.wallet.
- isi — ID приложения в App Store для iOS: 6443843352.
- ibi — имя пакета приложения для iOS: com.haqq.wallet.
#### Пример открытия браузера через DynamicLink
```js
const siteLink = 'https://alpha.islm.ai';
const browserLink = encodeURIComponent(`https://haqq.network?browser=${siteLink}`);
const wer3BrowserLink = encodeURIComponent(`https://haqq.network?web3_browser=${siteLink}`);
const query = '&apn=com.haqq.wallet&isi=6443843352&ibi=com.haqq.wallet';
const dynamicLinkForBrowser = `https://haqq.page.link/?link=${browserLink}${query}`;
const dynamicLinkForWeb3Browser = `https://haqq.page.link/?link=${wer3BrowserLink}${query}`;
console.log('browser', dynamicLinkForBrowser);
console.log('web3_browser', dynamicLinkForWeb3Browser);
```
---
> [Log] browser – "https://haqq.page.link/?link=https%3A%2F%2Fhaqq.network%3Fbrowser%3Dhttps%3A%2F%2Falpha.islm.ai&apn=com.haqq.wallet&isi=6443843352&ibi=com.haqq.wallet"
`browser` — Открывает обычный браузер устройства и переходит по указанному URL (в примере https://alpha.islm.ai)
---
> [Log] web3_browser – "https://haqq.page.link/?link=https%3A%2F%2Fhaqq.network%3Fweb3_browser%3Dhttps%3A%2F%2Falpha.islm.ai&apn=com.haqq.wallet&isi=6443843352&ibi=com.haqq.wallet"
`web3_browser` — Открывает встроенный Web3-браузер приложения и загружает siteLink, что позволяет пользователю взаимодействовать с Web3-сайтами непосредственно в приложении.
---
#### Пример связывания distinct id с приложением
```js
const distinctId = '123456';
const link = encodeURIComponent(`https://haqq.network?distinct_id=${distinctId}`);
const query = '&apn=com.haqq.wallet&isi=6443843352&ibi=com.haqq.wallet';
const dynamicLink = `https://haqq.page.link/?link=${link}${query}`
console.log('distinct_id', dynamicLink)
```
> [Log] distinct_id – "https://haqq.page.link/?link=https%3A%2F%2Fhaqq.network%3Fdistinct_id%3D123456&apn=com.haqq.wallet&isi=6443843352&ibi=com.haqq.wallet"
`distinct_id` — связывает указанный distinct_id с PostHog в мобильном приложении
## Примечания
- Диплинки, содержащие префикс `haqq:`, могут быть использованы как с двойным слешем (`//`), так и без него.
- При использовании `haqq:provider:BASE64_JSON` следует учитывать наличие известного бага: каждый переход в настройки после активации такого диплинка вызовет окно редактирования провайдера.
- QR-коды, содержащие адреса без префиксов, также поддерживаются и валидируются в приложении.