Consumer SDK для Android позволяет создавать приложения для совместного использования поездок с использованием модульной архитектуры. Вы можете использовать те части API, которые хотите использовать для своего конкретного приложения, и интегрировать их со своими собственными API. API-интерфейсы Consumer SDK для различных функций инкапсулированы в отдельные модули.
Если ваше приложение Ridesharing использует более ранние версии Consumer SDK, вам потребуется обновить приложение, чтобы использовать эту модульную архитектуру. В этом руководстве по миграции описано, как обновить приложение.
Обзор
Модульная архитектура Consumer SDK представляет объект Session, который хранит состояние пользовательского интерфейса. В предыдущих версиях Consumer SDK приложения перемещались между состояниями. С помощью этой модульной архитектуры вы создаете объект сеанса и имеете возможность отобразить сеанс на карте. Если сеансы не отображаются, карта пуста. Больше нет «пустого» или «инициализированного» состояния.
Объект Session представляет собой один экземпляр использования жизненного цикла модуля. Сессии — это точки доступа к API модуля. Например, сеанс совместного использования путешествий следует за одной поездкой. Вы взаимодействуете с объектом Session, чтобы контролировать поездку.
Объект сеанса связан с типом модуля. Поведение объекта Session связано с жизненным циклом объекта, используемого для его инициализации.
Предположим, вы создаете объект TripModel
для отслеживания TRIP_A. Если вы попытаетесь снова получить объект TripModel
для TRIP_A, вы получите тот же объект TripModel
. Чтобы отслеживать TRIP_B, получите новый объект TripModel
.
Состояния сеанса
Сеанс может находиться в одном из нескольких состояний:
Созданный сеанс представлен объектом Session. Вы создаете сеанс, вызывая метод
create
. Например:JourneySharingSession sessionA = JourneySharingSession.createInstance(TripModelA)
Запущенный сеанс регистрируется для обновления данных и значений элементов пользовательского интерфейса. Вы начинаете сеанс, вызывая метод
start
. Например:sessionA.start()
Показанный сеанс запускается автоматически. Он отображает элементы пользовательского интерфейса и обновляет их в ответ на обновления данных. Вы показываете сеанс, вызывая метод
showSession
. Например:ConsumerController.showSession(sessionA)
Остановленный сеанс прекращает обновление своих данных и элементов пользовательского интерфейса. Вы останавливаете сеанс, вызывая метод
stop
. Например:sessionA.stop()
Использование компонентов только данных и пользовательского интерфейса
Вы можете создать приложение для совместного использования поездок, используя либо компоненты, предназначенные только для данных, либо API-интерфейсы элементов пользовательского интерфейса, предоставляемые решением On-demand Rides and Delivery Solution.
Использование компонентов только для данных
Чтобы создать приложение для совместного использования поездок с использованием компонентов только для данных:
- Инициализируйте объект
ConsumerApi
. - Получите объект
TripModelManager
изConsumerApi
. - Начните отслеживать поездку с помощью
TripModelManager
, чтобы получить объектTripModel
. - Зарегистрируйте обратные вызовы для объекта
TripModel
.
В следующем примере показано, как использовать компоненты, предназначенные только для данных:
TripModelManager tripManager = ConsumerApi.getTripModelManager();
TripModel tripA = tripManager.getTripModel("trip_A");
tripA.registerTripCallback(new TripModelCallback() {})
Использование API-интерфейсов элементов пользовательского интерфейса
Используйте объект ConsumerController
для доступа к API элемента пользовательского интерфейса решения для поездок и доставки по требованию.
Чтобы создать приложение для совместного использования поездок с API-интерфейсами элементов пользовательского интерфейса решения On-demand Rides and Delivery Solution:
- Инициализируйте объект
ConsumerApi
. - Получите объект
TripModelManager
из объектаConsumerApi
. - Получите объект
TripModel
изTripModelManager
, который отслеживает одну поездку. - Добавьте
ConsumerMap[View/Fragment]
в представление приложения. - Получите объект
ConsumerController
изConsumerMap[View/Fragment]
. - Предоставьте объект
TripModel
контроллеру, чтобы получить объектJourneySharingSession
. - Используйте контроллер, чтобы отобразить
JourneySharingSession
.
В следующем примере показано, как использовать API пользовательского интерфейса:
TripModelManager tripManager = ConsumerApi.getTripModelManager();
TripModel tripA = TripModelManager.getTripModel("trip_A");
// Session is NOT automatically started when created.
JourneySharingSession jsSessionA = JourneySharingSession.createInstance(tripA);
JourneySharingSession jsSessionB = JourneySharingSession.createInstance(tripB);
// But a session is automatically started when shown.
ConsumerController.showSession(jsSessionA);
ConsumerController.showSession(jsSessionB); // hides trip A; shows trip B.
ConsumerController.hideAllSessions(); // don't show any sessions
// Unregister listeners and delete UI elements of jsSessionA.
consumerController.showSession(jsSessionA);
jsSessionA.stop();
// Recreates and shows UI elements of jsSessionA.
jsSessionA.start();
Изменения кода модульной архитектуры
Если ваше приложение Ridesharing использует более ранние версии Consumer SDK, обновленная модульная архитектура потребует некоторых изменений в вашем коде. В этом разделе описаны некоторые из этих изменений.
Разрешения на определение местоположения
Разрешения FINE_LOCATION
больше не требуются для Consumer SDK.
Мониторинг поездки
Обновленная модульная архитектура требует изменений кода как для пользователей уровня данных, так и для пользователей пользовательского интерфейса.
В более ранних версиях пользователь уровня данных мог управлять мониторингом поездок, используя следующий код:
ConsumerApi.initialize()
TripModelManager manager = ConsumerApi.getTripManager()
manager.setActiveTrip("trip_id")
manager.registerActiveTripCallback(new TripModelCallback() {})
Используя модульную архитектуру, пользователь уровня данных будет использовать следующий код:
ConsumerApi.initialize()
TripModelManager manager = ConsumerApi.getTripManager()
TripModel tripA = TripModelManager.getTrip("trip_A")
tripA.registerTripCallback(new TripModelCallback() {})
В более ранних версиях пользователь пользовательского интерфейса мог управлять мониторингом поездок, используя следующий код:
ConsumerApi.initialize()
TripModelManager manager = ConsumerApi.getTripManager()
manager.setActiveTrip("trip_id")
ConsumerController controller = consumerGoogleMap.getConsumerController();
consumerController.startJourneySharing()
Используя модульную архитектуру, пользователь пользовательского интерфейса будет использовать следующий код:
ConsumerApi.initialize()
TripModelManager manager = ConsumerApi.getTripManager()
TripModel tripA = TripModelManager.getTripModel("trip_A");
ConsumerController controller = consumerGoogleMap.getConsumerController();
JourneySharingSession jsSessionA = JourneySharingSession.createInstance(tripA);
controller.showSession(jsSessionA);
Центрирование карты
Представление или фрагмент карты больше не приближается к местоположению пользователя при инициализации, когда нет активного сеанса. Он по-прежнему будет автоматически масштабироваться, чтобы показать активный сеанс обмена информацией о путешествиях, пока включена функция AutoCamera. Автокамера включена по умолчанию.
В более ранних версиях вы могли бы использовать следующий код для центрирования камеры для текущего активного сеанса:
consumerController.centerMapForState()
Используя модульную архитектуру, вы должны использовать следующий код:
CameraUpdate cameraUpdate = consumerController.getCameraUpdate()
if (cameraUpdate != null) {
googleMap.animateCamera(cameraUpdate);
// OR googleMap.moveCamera(cameraUpdate);
}
Чтобы отключить функцию AutoCamera в более ранних версиях, вы должны использовать следующий код:
consumerController.disableAutoCamera(true);
Используя модульную архитектуру, вы должны использовать следующий код:
consumerController.setAutoCameraEnabled(false);
Кастомизация
Пользовательский FAB решения для поездок и доставки по требованию был удален с карты.
Связанные методы для FAB также были удалены:
ConsumerController.isMyLocationFabEnabled()
ConsumerController.setMyLocationFabEnabled()