Android Consumer SDK のモジュール化の移行

Consumer SDK for Android を使用すると、モジュラー アーキテクチャを使用してライドシェアリング アプリを作成できます。特定のアプリに使用する API の部分を使用して、それを独自の API と統合できます。さまざまな機能の Consumer SDK API は、個別のモジュールにカプセル化されています。

ライドシェアリング アプリで古いバージョンの Consumer SDK を使用している場合、このモジュラー アーキテクチャを使用するには、アプリをアップグレードする必要があります。この移行ガイドでは、アプリをアップグレードする方法について説明します。

概要

コンシューマ SDK のモジュラー アーキテクチャでは、ユーザー インターフェースの状態を保持するセッション オブジェクトが導入されています。以前のバージョンの Consumer SDK では、アプリは状態間を行き来していました。このモジュラー アーキテクチャでは、Session オブジェクトを作成すると、セッションを地図上に表示できます。セッションが表示されていない場合、地図は空白になります。「空」または「初期化済み」の状態ではなくなりました。

Session オブジェクトは、モジュールの 1 つのライフサイクル使用インスタンスを表します。セッションはモジュールの API へのアクセス ポイントです。たとえば、移動経路の共有セッションは 1 つのルートをたどります。Session オブジェクトを操作してルートをモニタリングします。

Session オブジェクトはモジュール タイプに関連付けられています。Session オブジェクトの動作は、初期化に使用されるオブジェクトのライフサイクルにリンクされます。

TRIP_A をトラッキングする TripModel オブジェクトを作成するとします。TRIP_A の TripModel オブジェクトを再度取得しようとすると、同じ TripModel オブジェクトが返されます。TRIP_B をトラッキングするには、新しい TripModel オブジェクトを取得します。

セッションの状態

セッションは次のいずれかの状態になります。

  • 作成されたセッションは、Session オブジェクトで表されます。セッションを作成するには、create メソッドを呼び出します。次に例を示します。

    JourneySharingSession sessionA = JourneySharingSession.createInstance(TripModelA)
    
  • 開始されたセッションは、ユーザー インターフェース要素のデータと値を更新するために登録されます。セッションを開始するには、start メソッドを呼び出します。次に例を示します。

    sessionA.start()
    
  • 表示されたセッションが自動的に開始されます。ユーザーインターフェース要素を表示し データの更新に応じて更新しますセッションを表示するには、showSession メソッドを呼び出します。次に例を示します。

    ConsumerController.showSession(sessionA)
    
  • 停止したセッションでは、データの更新とユーザー インターフェース要素の更新が停止します。セッションを停止するには、stop メソッドを呼び出します。次に例を示します。

    sessionA.stop()
    

データ専用コンポーネントとユーザー インターフェース コンポーネントの使用

ライドシェアリング アプリを作成するには、データのみのコンポーネントまたは On-demand Rides and Deliveries Solution が提供するユーザー インターフェース要素の API を使用します。

データ専用コンポーネントの使用

データ専用コンポーネントを使用してライドシェアリング アプリを作成するには:

  • ConsumerApi オブジェクトを初期化します。
  • ConsumerApi から TripModelManager オブジェクトを取得します。
  • TripModelManager を使ってルートのモニタリングを開始し、TripModel オブジェクトを受け取ります。
  • TripModel オブジェクトにコールバックを登録します。

次の例は、データのみのコンポーネントを使用する方法を示しています。

TripModelManager tripManager = ConsumerApi.getTripModelManager();
TripModel tripA = tripManager.getTripModel("trip_A");
tripA.registerTripCallback(new TripModelCallback() {})

User Interface Element API を使用する

ConsumerController オブジェクトを使用して、オンデマンド配車と配達ソリューションのユーザー インターフェース要素の API にアクセスします。

On-demand Rides and Deliveries Solution ユーザー インターフェース要素 API を使用してライドシェアリング アプリを作成するには:

  • ConsumerApi オブジェクトを初期化します。
  • ConsumerApi オブジェクトから TripModelManager オブジェクトを取得します。
  • 1 つのルートをトラッキングする TripModelManager から TripModel オブジェクトを取得します。
  • ConsumerMap[View/Fragment] をアプリケーション ビューに追加します。
  • ConsumerMap[View/Fragment] から ConsumerController オブジェクトを取得します。
  • 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();

モジュール アーキテクチャ コードの変更

ライドシェアリング アプリで古いバージョンの Consumer SDK を使用している場合、モジュラー アーキテクチャが更新されるため、コードを変更する必要があります。このセクションでは、その変更の一部について説明します。

位置情報の利用許可

Consumer SDK で FINE_LOCATION 権限が不要になりました。

ルートのモニタリング

更新されたモジュラー アーキテクチャでは、データレイヤとユーザー インターフェースの両方のユーザーに対してコードを変更する必要があります。

以前のバージョンでは、データレイヤ ユーザーは次のコードを使用してルートのモニタリングを処理していました。

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);
}

以前のバージョンで自動カメラ機能を無効にするには、次のコードを使用します。

consumerController.disableAutoCamera(true);

モジュラー アーキテクチャを使用する場合は、次のコードを使用します。

consumerController.setAutoCameraEnabled(false);

カスタマイズ

オンデマンド配車と配達ソリューションのカスタム FAB が地図から削除されました。

カスタム FAB

FAB に関連付けられているメソッドも削除されました。

ConsumerController.isMyLocationFabEnabled()
ConsumerController.setMyLocationFabEnabled()