В предыдущем руководстве мы немного рассмотрели, как работает Content Hub. В этом руководстве мы увидим, как работает URLdispatcher и как обрабатывать данные, импортированные из Content Hub.

Обработка данных из Content Hub

Один из самых простых способов протестировать приложение — отправить тестовый клик самому себе в Telegram и открыть этот файл кликов в OpenStore через Content Hub:

Если мы нажмем на приложение OpenStore, оно откроется и спросит, хотим ли мы установить файл щелчка. Давайте заглянем в код, чтобы увидеть, как это делается:

Вы видите тот элемент Подключения, который нацелен на ContentHub? Когда он получает сигнал onImportRequested, он принимает URL-адрес данных, отправленных из Content Hub (transfer.items[0].url — это URL-адрес первых данных отправлено) и откройте элемент PopUp, чтобы пользователь мог установить клик.

А как насчет URL-диспетчера?

Диспетчер URL — это часть программного обеспечения, похожего на Content Hub, которое упрощает нашу жизнь, пытаясь выбрать правильное приложение для определенного протокола. Например: мы, вероятно, хотим открыть веб-браузер при нажатии на HTTP-протокол. Если мы нажмем на ссылку на карте, ее будет удобно открыть с помощью uNav или открыть ссылку на твиттер в приложении Twitter! Как это работает?

Диспетчер URL выбирает, какое приложение (согласно их manifest.json) будет открывать определенную ссылку.

Давайте посмотрим, как наше навигационное приложение выглядит внутри. Манифест uNav показывает специальные хуки для URLdispatcher в его коде manifest.json:

Это означает, что в uNav будет открыта ссылка вида http://map.unav.me/xxxxx,xxxxx. И это определено в строках 2 и 3, где он ищет протокол http, за которым следует map.unav.me.

Кроме того, URI в формате geo:xxx,xxx должен открываться в uNav, как это определено в строке 11.

И как нам управлять полученным URL?

После того как URLdispatcher отправит ссылку в соответствующее приложение, нам нужно обработать этот URL или URI в целевом приложении. Давайте посмотрим, как это сделать:

В основной файл qml нам нужно добавить некоторый код, чтобы знать, что делать с отправленным URL-адресом. Сначала добавьте Элемент Arguments, содержащий URL, как это делается, например, в Linphone app. Также мы добавляем соединение с обработчиком URI с элементом Connection с UriHandler в качестве цели.

Этот код будет управлять URI в форме linphone://sip:[email protected] при открытии приложения. Но что нам нужно сделать, чтобы обработать эту ссылку, когда приложение закрыто?

Нам нужно добавить немного дополнительного кода, который будет охватывать два случая:
1) Мы получаем один URL
2) Мы получаем более одного URL

Все хорошо и хорошо, но что произойдет, если более чем одно приложение имеет один и тот же тип URL?

Очень хороший вопрос. Что произойдет, если мы нажмем на ссылку Twitter? Как URLdispatcher обрабатывает такой URL как протокол «http» или протокол «http://twitter»?

Что произойдет, если два приложения имеют один и тот же определенный протокол?

Теперь пришло время провести несколько тестов и поделиться результатами в следующем руководстве. В тот же бат-час, в том же бат-канале.