Миграция для Android Consumer SDK Modularization

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()