Глубокая связь¶
В этом руководстве описывается, как настроить приложение для работы с глубокими ссылками на различных платформах. Для обработки входящих ссылок необходимо решить две задачи:
- Если приложение ранее не было открыто, то глубокая ссылка должна установить начальное состояние
- Если приложение уже было открыто, глубокая ссылка должна обновить состояние, чтобы отразить входящую ссылку.
React Native предоставляет Linking для получения уведомлений о входящих ссылках. React Navigation может интегрироваться с модулем Linking для автоматической обработки глубоких ссылок. В Web-версии React Navigation может интегрироваться с API history браузера для обработки URL на стороне клиента. Более подробно о том, как настроить ссылки в React Navigation, читайте в configuring links.
Хотя вам не обязательно использовать свойство linking из React Navigation, и вы можете самостоятельно работать с глубокими ссылками, используя API Linking и осуществляя навигацию оттуда, это будет значительно сложнее, чем использование свойства linking, которое обрабатывает многие граничные случаи за вас. Поэтому мы не рекомендуем реализовывать его самостоятельно.
Ниже мы рассмотрим необходимые настройки для того, чтобы интеграция глубоких ссылок работала.
Настройка с проектами Expo¶
Во-первых, необходимо указать схему URL для вашего приложения. Она соответствует строке перед :// в URL, поэтому если ваша схема - mychat, то ссылка на ваше приложение будет mychat://. Вы можете зарегистрировать схему в файле app.json, добавив строку под ключом scheme:
1 2 3 4 5 | |
Далее установим expo-linking, который понадобится нам для получения префикса глубокой ссылки:
1 | |
Затем настроим React Navigation на использование scheme для разбора входящих глубоких ссылок:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | |
Необходимость использования Linking.createURL заключается в том, что схема будет отличаться в зависимости от того, где находится клиентское приложение - в клиентском приложении или в автономном приложении.
Схема, указанная в app.json, применима только к автономным приложениям. В клиентском приложении Expo можно установить глубокую ссылку, используя exp://ADDRESS:PORT/--/, где ADDRESS часто имеет значение 127.0.0.1, а PORT часто имеет значение 19000 - URL выводится при запуске expo start. Функция Linking.createURL абстрагируется от этого, чтобы не указывать их вручную.
Если вы используете универсальные ссылки, то необходимо добавить в префиксы и свой домен:
1 2 3 4 5 6 | |
Настройка на "голых" проектах React Native¶
Настройка на iOS¶
Настроим нативное приложение для iOS так, чтобы оно открывалось по схеме URI mychat://.
Для этого необходимо подключить RCTLinking к проекту, выполнив описанные здесь действия. Чтобы иметь возможность прослушивать входящие ссылки на приложение, необходимо добавить следующие строки в AppDelegate.m в проекте:
1 2 3 4 5 6 7 8 9 10 | |
Если ваше приложение использует Universal Links, то необходимо добавить следующий код:
1 2 3 4 5 6 7 8 | |
Теперь необходимо добавить схему в конфигурацию проекта.
Проще всего это сделать с помощью пакета uri-scheme, выполнив следующую команду:
1 | |
Если вы хотите сделать это вручную, откройте проект (например, SimpleApp/ios/SimpleApp.xcworkspace) в Xcode. Выберите проект в боковой панели и перейдите на вкладку "Информация". Прокрутите вниз до раздела "Типы URL" и добавьте один. В новом типе URL установите идентификатор и схему URL на желаемую схему URL.
Для того чтобы универсальные ссылки работали в вашем приложении, необходимо также настроить Associated Domains на вашем сервере.
Гибридные React Native и нативные iOS-приложения¶
Если вы используете React Navigation в гибридном приложении - приложении для iOS, в котором есть как Swift/ObjC, так и React Native, - возможно, в вашем Podfile не хватает подспецифика RCTLinkingIOS, который по умолчанию устанавливается в новые проекты React Native. Чтобы добавить его, убедитесь, что ваш Podfile выглядит следующим образом:
1 2 3 4 5 | |
Настройка в Android¶
Для настройки внешней привязки в Android можно создать новое намерение в манифесте.
Проще всего это сделать с помощью пакета uri-scheme: npx uri-scheme add mychat --android.
Если вы хотите добавить его вручную, откройте файл SimpleApp/android/app/src/main/AndroidManifest.xml и внесите следующие изменения:
- Установите
launchModeдляMainActivityвsingleTask, чтобы получить намерение на существующуюMainActivity(это значение используется по умолчанию, так что, возможно, вам не придется ничего менять). - Добавьте новый
intent-filterвнутри записиMainActivityс действием типаVIEW:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | |
Аналогично универсальным ссылкам на iOS, на Android также можно использовать домен для связи приложения с вашим сайтом с помощью проверки Android App Links. Для начала необходимо настроить файл AndroidManifest.xml:
- Добавьте
android:autoVerify="true"в запись<intent-filter>. - Добавьте
schemeиhostвашего домена в новую запись<data>внутри<intent-filter>.
После добавления они должны выглядеть следующим образом:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | |
Затем необходимо объявить связь между вашим сайтом и фильтрами намерений, разместив JSON-файл Digital Asset Links.
Тестирование глубоких ссылок¶
Перед тестированием глубоких ссылок убедитесь, что вы пересобрали и установили приложение в эмуляторе/симуляторе/устройстве.
Если вы тестируете приложение на iOS, запустите его:
1 | |
Если вы тестируете на Android, выполните команду:
1 | |
Если вы используете Expo managed workflow и тестируете на Expo client, то перестраивать приложение не нужно. Однако необходимо использовать правильный адрес и порт, которые выводятся при запуске expo start, например, exp://127.0.0.1:19000/--/.
Если вы хотите протестировать свою схему в приложении Expo, вам необходимо пересобрать свое автономное приложение, выполнив команду expo build:ios -t simulator или expo build:android, и установить полученные исполняемые файлы.
Тестирование с помощью npx uri-scheme¶
Пакет uri-scheme - это инструмент командной строки, который можно использовать для тестирования глубоких ссылок как на iOS, так и на Android. Его можно использовать следующим образом:
1 | |
Например:
1 | |
Или при использовании клиента Expo:
1 | |
Тестирование с помощью xcrun на iOS¶
Команда xcrun может быть использована следующим образом для тестирования глубоких ссылок с помощью симулятора iOS:
1 | |
Например:
1 | |
Тестирование с помощью adb на Android¶
Команда adb может быть использована следующим образом для тестирования глубоких ссылок с помощью эмулятора Android или подключенного устройства:
1 | |
Например:
1 | |
Или при использовании клиента Expo:
1 | |
Интеграции сторонних программ¶
React Native Linking - не единственный способ работы с глубокими ссылками. Возможно, вы захотите интегрировать и другие сервисы, такие как Firebase Dynamic Links, Branch и т.д., которые предоставляют свой собственный API для получения уведомлений о входящих ссылках.
Для этого необходимо переопределить способ подписки React Navigation на входящие ссылки. Для этого можно предоставить собственные функции getInitialURL и subscribe:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | |
Аналогично приведенному выше примеру, вы можете интегрировать любой API, предоставляющий возможность получения начального URL и подписки на новые входящие URL с помощью опций getInitialURL и subscribe.
