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

Consumer SDK для iOS позволяет создавать приложения для совместного использования поездок с использованием модульной архитектуры. Вы можете использовать те части API, которые хотите использовать для своего конкретного приложения, и интегрировать их со своими собственными API. API-интерфейсы Consumer SDK для различных функций инкапсулированы в отдельные модули.

Если ваше приложение Ridesharing использует более ранние версии Consumer SDK, вам потребуется обновить приложение, чтобы использовать эту модульную архитектуру. В этом руководстве по миграции описано, как обновить приложение.

Обзор

Модульная архитектура Consumer SDK представляет объект MapViewSession , который хранит состояние пользовательского интерфейса. В предыдущих версиях Consumer SDK приложения перемещались между состояниями. С помощью этой модульной архитектуры вы создаете объект MapViewSession и имеете возможность отобразить сеанс на карте. Если сеансы не отображаются, на карте отображается то же содержимое, что и при использовании Maps SDK для iOS.

Объект MapViewSession представляет собой один экземпляр использования жизненного цикла модуля. Сессии — это точки доступа к API модуля. Например, сеанс совместного использования путешествий следует за одной поездкой. Вы взаимодействуете с объектом JourneySharingSession , чтобы отслеживать поездку.

Объект TripModel

В предыдущих версиях Consumer SDK экземпляр TripService позволял отслеживать только одну поездку в реальном времени за раз. Используя объект TripModel , вы можете отслеживать несколько поездок в режиме реального времени в одном экземпляре TripService . Экземпляр TripModel можно создать из TripService , и каждый экземпляр TripModel привязан к определенной поездке.

Экземпляр TripModel вызывает события обновления, если зарегистрированный подписчик находится в поездке во время обновления.

Объект TripModel также можно использовать для создания экземпляра объекта JourneySharingSession .

Состояния MapViewSession

Экземпляр MapViewSession можно добавить только в один mapView одновременно и он может находиться в одном из следующих двух состояний:

  • Состояние GMTCMapViewSessionStateInactive указывает, что этот MapViewSession либо еще не был добавлен ни в один mapView , либо что он был удален из mapView . Когда экземпляр MapViewSession удаляется из mapView , вызывается метод didRemoveFromMapView .

    Вызов hideMapViewSession hideAllMapViewSessions удаляет mapViewSession из mapView :

    [_mapView hideMapViewSession:mapViewSessionA];
    

    или

    [_mapView hideAllMapViewSessions];
    
  • Состояние GMTCMapViewSessionStateActive указывает, что этот MapViewSession был добавлен в mapView . Когда экземпляр MapViewSession добавляется в mapView , вызывается метод didAddToMapView . Вызов метода showMapViewSession добавляет mapViewSession к целевому mapView :

    [_mapView showMapViewSession:mapViewSessionA];
    

Использование компонентов только данных и пользовательского интерфейса

Вы можете создать приложение для совместного использования поездок, используя либо компоненты, предназначенные только для данных, либо API-интерфейсы элементов пользовательского интерфейса, предоставляемые решением «Поездки и доставки по требованию».

Использование компонентов только для данных

Чтобы создать приложение для совместного использования поездок с использованием компонентов только для данных:

  1. Инициализируйте объект GMTCServices , указав идентификатор поставщика и поставщика токена доступа.
  2. Получите свойство tripService из общего экземпляра объекта GMTCServices .
  3. Создайте или получите экземпляр объекта GMTCTripModel для указанной поездки, используя метод tripModelForTripName объекта tripService .
  4. Зарегистрируйте обратные вызовы для экземпляра GMTCTripModel , чтобы начать мониторинг поездок.

В следующем примере показано, как использовать компоненты, предназначенные только для данных:

[GMTCServices setAccessTokenProvider:[[AccessTokenProvider alloc] init]
                          providerID:yourProviderID];
GMTCTripService *tripService = [GMTCServices sharedServices].tripService;

// Create a tripModel instance for listening to updates to the trip specified by this trip name.
GMTCTripModel *tripModel = [tripService tripModelForTripName:tripName];

// Register for the trip update events.
[tripModel registerSubscriber:self];

// To stop listening for the trip update.
[tripModel unregisterSubscriber:self];

Использование API-интерфейсов элементов пользовательского интерфейса

Выполните следующую процедуру, чтобы создать потребительское приложение с API-интерфейсами элементов пользовательского интерфейса решения On-demand Rides and Delivery Solution:

  1. Инициализируйте объект GMTCServices , указав идентификатор поставщика и поставщика токена доступа.
  2. Инициализируйте объект GMTCMapView для отрисовки базовой карты.
  3. Получите свойство tripService из общего экземпляра объекта GMTCServices .
  4. Создайте или получите экземпляр объекта GMTCTripModel для указанной поездки, используя метод tripModelForTripName объекта tripService .
  5. Создайте объект GMTCJourneySharingSession с экземпляром GMTCTripModel .
  6. Покажите объект GMTCJourneySharingSession в mapView .
  7. Зарегистрируйте обратные вызовы для экземпляра GMTCTripModel , чтобы начать мониторинг поездок.

В следующем примере показано, как использовать API пользовательского интерфейса:

[GMTCServices setAccessTokenProvider:[[AccessTokenProvider alloc] init]
                          providerID:yourProviderID];
GMTCTripService *tripService = [GMTCServices sharedServices].tripService;

// Create a tripModel instance for listening to updates to the trip specified by this trip name.
GMTCTripModel *tripModel = [tripService tripModelForTripName:tripName];
GMTCJourneySharingSession *journeySharingSession =
  [[GMTCJourneySharingSession alloc] initWithTripModel:tripModel];

// Add the journeySharingSession instance on the mapView for UI updating.
[self.mapView showMapViewSession:journeySharingSession];

// Register for the trip update events.
[tripModel registerSubscriber:self];

// To remove the JourneySharingSession from the mapView:
[self.mapView hideMapViewSession:journeySharingSession];

// To stop listening for the trip update.
[tripModel unregisterSubscriber:self];

Изменения кода модульной архитектуры

Если ваше приложение Ridesharing использует более ранние версии Consumer SDK, обновленная модульная архитектура потребует некоторых изменений в вашем коде. В этом разделе описаны некоторые из этих изменений.

Мониторинг поездки

Обновленная модульная архитектура требует изменений кода как для пользователей уровня данных, так и для пользователей пользовательского интерфейса.

В более ранних версиях пользователь уровня данных мог управлять мониторингом поездок, используя следующий код:

GRCTripRequest *tripRequest =
    [[GRCTripRequest alloc] initWithRequestHeader:[GRSRequestHeader defaultHeader]
                                         tripName:tripName
                          autoRefreshTimeInterval:1];
GRCTripService *tripService = [GRCServices sharedServices].tripService;
[tripService registerServiceSubscriber:self];
[tripService setActiveTripWithRequest:tripRequest];

Используя модульную архитектуру, пользователь уровня данных будет использовать следующий код:

GMTCTripService *tripService = [GMTCServices sharedServices].tripService;
GMTCTripModel *tripModel = [tripService tripModelForTripName:tripName];
tripModel.options.autoRefreshTimeInterval = 1;
[tripModel registerSubscriber:self];

В более ранних версиях пользователь пользовательского интерфейса мог управлять мониторингом поездок, используя следующий код:

// Show the Journey Sharing user interface.
[self.mapView startTripMonitoring];

// Hide the Journey Sharing user interface.
[self.mapView resetCustomerState];

Используя модульную архитектуру, пользователь пользовательского интерфейса будет использовать следующий код:

// Show the Journey Sharing user interface.
GMTCJourneySharingSession *journeySharingSession =
  [[GMTCJourneySharingSession alloc] initWithTripModel:tripModel];
[self.mapView showMapViewSession:journeySharingSession];

// Hide the Journey Sharing user interface.
[self.mapView hideMapViewSession:journeySharingSession];