Начало работы с NaviKit SDK
Процесс начала работы с NaviKit SDK имеет много сходств с подключением обычного MapKit, однако имеет несколько важных отличий.
Шаг 1. Получение ключа для работы с NaviKit SDK
Для работы с NaviKit SDK требуется наличие API-ключа.
- Создайте новый API-ключ для MapKit SDK или используйте существующий.
- Чтобы API-ключ можно было использовать в приложениях с NaviKit SDK его необходимо активировать. Для этого напишите нам на почту paid-api-maps@yandex-team.ru.
Шаг 2. Добавление NaviKit SDK зависимостей
Для использования всех функций, предоставляемых NaviKit SDK, требуется подключение нескольких зависимостей:
-
Добавьте в
pubspec.yamlNavikit SDK:dependencies: yandex_maps_navikit: version: ^4.39.0 -
После этого добавьте платформенные библиотеки с реализацией интерфейсов NavigationStyleProvider и RoadEventsStyleProvider, которые предоставляют фирменные UI-элементы Яндекс Карт и иконки для слоя дорожных событий соответственно:
Для Android добавьте зависимости в
./android/app/build.gradle:implementation 'com.yandex.mapkit.styling:automotivenavigation:4.39.0' implementation 'com.yandex.mapkit.styling:roadevents:4.39.0'Для iOS добавьте зависимости в
./ios/Podflie:platform :ios, '13.0' target 'Runner' do pod 'YMKStylingAutomotiveNavigation', '4.39.0' pod 'YMKStylingRoadEvents', '4.39.0' end -
Выполните
pub get, чтобы синхронизировать проект и применить изменения
Шаг 3. Разрешение на запрос локации
Navikit SDK требует разрешение на запрос локации как на Android, так и на iOS
-
Добавьте в Android Manifest, находящийся в
./android/app/main, объявление разрешения на использование локации:<manifest ... > <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> </manifest> -
Для объявления разрешения на использование локации в iOS найдите в конце файла
./ios/Podfileсекцию кода, которая содержит информацию:post_install do |installer| installer.pods_project.targets.each do |target| flutter_additional_ios_build_settings(target) ...И добавьте туда разрешение на использование локации, чтобы секция с кодом имела следующий вид:
post_install do |installer| installer.pods_project.targets.each do |target| flutter_additional_ios_build_settings(target) target.build_configurations.each do |config| config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ||= [ '$(inherited)', ## dart: [PermissionGroup.location, PermissionGroup.locationAlways, PermissionGroup.locationWhenInUse] 'PERMISSION_LOCATION=1', ] end end endПосле этого добавьте в
./ios/Runner/Info.plistследующую информацию:<key>NSLocationWhenInUseUsageDescription</key> <string>Your location is required for navigation</string> -
Запросите разрешение на использование локации у пользователя во время работы приложения. Сделать это можно, например, при помощи пакета permission_handler.
Шаг 4. Настройка MapKit SDK
Выполните шаги из Шаг 3. Добавьте API-ключ для MapKit: установите ваш API-ключ, инициализируйте MapKit и создайте View с картой.
Если после запуска приложения MapKit карта успешно открылась и ее данные прогрузились, настройки выполнены верно.
Шаг 5. Обратите внимание при дальнейшей работе
MapKit хранит слабые ссылки на передаваемые ему Listener-объекты. Необходимо самим хранить ссылку на них в памяти:
final class MapCameraListenerImpl implements MapCameraListener {
// ......
}
final class SomeMapScopedClass {
final MapWindow _mapWindow;
final MapCameraListener _cameraListener = MapCameraListenerImpl();
SomeMapScopedClass(this._mapWindow);
void addListener() {
_mapWindow.map.addCameraListener(_cameraListener);
}
}
Когда все зависимости установлены, можно приступить к использованию NaviKit SDK в вашем проекте.
В следующем разделе рассмотрена общая архитектура сущностей NaviKit SDK.