Migration für das iOS Consumer SDK-Modularisierung

Mit dem Consumer SDK for iOS können Sie Mitfahrportale in einer modularen Architektur erstellen. Sie können die Teile der API, die Sie für Ihre spezifische Anwendung nutzen möchten, verwenden und in Ihre eigenen APIs einbinden. Die Consumer SDK-APIs für verschiedene Funktionen sind in separate Module gekapselt.

Wenn Ihre Mitfahrdienst-App ältere Versionen des Consumer SDK verwendet, müssen Sie Ihre App aktualisieren, um diese modulare Architektur nutzen zu können. In dieser Migrationsanleitung wird beschrieben, wie Sie Ihre Anwendung aktualisieren.

Überblick

Die modulare Architektur des Consumer SDK enthält ein MapViewSession-Objekt, das den Status der Benutzeroberfläche enthält. In früheren Versionen des Consumer SDK wechselten Apps zwischen den Status. Bei dieser modularen Architektur erstellen Sie ein MapViewSession-Objekt und haben die Möglichkeit, die Sitzung auf der Karte anzuzeigen. Wenn keine Sitzungen angezeigt werden, sind auf der Karte dieselben Inhalte zu sehen wie bei Verwendung des Maps SDK for iOS.

Ein MapViewSession-Objekt stellt eine einzelne Lebenszyklus-Nutzungsinstanz eines Moduls dar. Sitzungen sind die Zugangspunkte zu Modul-APIs. Beispielsweise folgt eine „Journey Sharing“-Sitzung nach einer einzelnen Fahrt. Sie interagieren mit dem JourneySharingSession-Objekt, um die Fahrt im Blick zu behalten.

TripModel Objekt

In früheren Versionen des Consumer SDK können Sie mit einer TripService-Instanz jeweils nur eine Live-Fahrt überwachen. Mit einem TripModel-Objekt können Sie mehrere Livefahrten in einer TripService-Instanz beobachten. Eine Instanz von TripModel kann aus der TripService erstellt werden und jede Instanz von TripModel ist an eine bestimmte Fahrt gebunden.

Die Instanz TripModel ruft Update-Ereignisse auf, wenn ein registrierter Abonnent sich auf der Fahrt befindet, während er aktualisiert wird.

Mit dem TripModel-Objekt kann auch eine Instanz des JourneySharingSession-Objekts erstellt werden.

MapViewSession Bundesländer

Eine MapViewSession-Instanz kann jeweils nur in einer mapView-Instanz hinzugefügt werden und kann einen der folgenden zwei Status haben:

  • Der Status GMTCMapViewSessionStateInactive gibt an, dass diese MapViewSession entweder noch keinem mapView hinzugefügt wurde oder aus einem mapView entfernt wurde. Wenn die Instanz MapViewSession aus einem mapView entfernt wurde, wird die Methode didRemoveFromMapView aufgerufen.

    Durch das Aufrufen der Methode hideMapViewSession oder hideAllMapViewSessions wird die mapViewSession aus mapView entfernt:

    [_mapView hideMapViewSession:mapViewSessionA];
    

    oder

    [_mapView hideAllMapViewSessions];
    
  • Der Status GMTCMapViewSessionStateActive gibt an, dass diese MapViewSession einem mapView hinzugefügt wurde. Wenn eine Instanz von MapViewSession zu einem mapView hinzugefügt wurde, wird die Methode didAddToMapView aufgerufen. Durch Aufrufen der Methode showMapViewSession wird mapViewSession der Ziel-mapView hinzugefügt:

    [_mapView showMapViewSession:mapViewSessionA];
    

Nur Daten und Komponenten der Benutzeroberfläche verwenden

Sie können eine Mitfahrdienst-App entweder mit reinen Datenkomponenten oder den APIs der Benutzeroberfläche aus der On-Demand-Lösung „Ride and Deliveries“ erstellen.

Reine Datenkomponenten verwenden

So erstellen Sie eine Mitfahrdienst-App mit reinen Datenkomponenten:

  1. Initialisieren Sie ein GMTCServices-Objekt. Geben Sie dazu die Anbieter-ID und den Zugriffstoken-Anbieter an.
  2. Rufen Sie das Attribut tripService aus der gemeinsamen Instanz des GMTCServices-Objekts ab.
  3. Erstellen oder rufen Sie eine Instanz eines GMTCTripModel-Objekts für eine angegebene Fahrt mithilfe der tripModelForTripName-Methode des tripService-Objekts ab.
  4. Registrieren Sie Callbacks für die Instanz GMTCTripModel, um die Fahrtüberwachung zu starten.

Das folgende Beispiel zeigt, wie reine Datenkomponenten verwendet werden:

[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];

UI-Element-APIs verwenden

So erstellen Sie eine Nutzer-App mit den APIs der On-Demand-Benutzeroberfläche „Rides and Deliveries“:

  1. Initialisieren Sie ein GMTCServices-Objekt. Geben Sie dazu die Anbieter-ID und den Zugriffstoken-Anbieter an.
  2. Initialisieren Sie ein GMTCMapView-Objekt zum Rendern der Basiskarte.
  3. Rufen Sie das Attribut tripService aus der gemeinsamen Instanz des GMTCServices-Objekts ab.
  4. Erstellen oder rufen Sie eine Instanz eines GMTCTripModel-Objekts für eine angegebene Fahrt mithilfe der tripModelForTripName-Methode des tripService-Objekts ab.
  5. Erstellen Sie ein GMTCJourneySharingSession-Objekt mit der Instanz GMTCTripModel.
  6. Blenden Sie das GMTCJourneySharingSession-Objekt auf der mapView ein.
  7. Registrieren Sie Callbacks für die Instanz GMTCTripModel, um die Fahrtüberwachung zu starten.

Das folgende Beispiel zeigt, wie die APIs der Benutzeroberfläche verwendet werden:

[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];

Änderungen am Code der modularen Architektur

Wenn Ihre Mitfahrdienst-App ältere Versionen des Consumer SDK verwendet, erfordert die aktualisierte modulare Architektur einige Änderungen an Ihrem Code. In diesem Abschnitt werden einige dieser Änderungen beschrieben.

Fahrtüberwachung

Die aktualisierte modulare Architektur erfordert sowohl für Nutzer der Datenebene als auch für Nutzer der Benutzeroberfläche Codeänderungen.

In früheren Versionen konnte ein Nutzer auf Datenebene die Fahrtüberwachung mit dem folgenden Code übernehmen:

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

Bei Verwendung der modularen Architektur würde ein Nutzer auf Datenebene den folgenden Code verwenden:

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

In früheren Versionen konnte ein Benutzer der Benutzeroberfläche die Fahrtüberwachung mit dem folgenden Code durchführen:

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

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

Bei Verwendung der modularen Architektur würde ein Nutzer der Benutzeroberfläche den folgenden Code verwenden:

// 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];