迁移 Android 消费者 SDK 模块化

借助面向 Android 的消费者 SDK,您可以使用 模块化架构您可以根据需要使用 API 的各个部分 供您为特定应用使用,并将它们与您自己的 API 集成。 消费者 SDK 不同功能的 API 被封装到单独的模块中。

如果您的拼车应用使用的是较低版本的消费者 SDK, 您需要升级应用才能使用这种模块化架构。这个 迁移指南介绍了如何升级您的应用。

概览

消费者 SDK 模块化架构引入了 保存界面状态的 Session 对象。在以往版本中 使用消费者 SDK 时,应用会在各状态之间流动。包含 在这个模块化架构中,您需要创建一个 Session 对象 并选择在地图上显示会话如果没有会话 地图是空白的。系统不会再显示“空” 或“initialized”state.

Session 对象表示模块的单个生命周期使用实例。 会话是模块 API 的接入点。例如: “旅程分享”会话会跟踪一次行程。您与之互动 与 Session 对象关联,以监控行程。

会话对象与模块类型相关联。Session 对象的 都与用于初始化该行为的对象的生命周期相关联。

假设您创建一个 TripModel 对象来跟踪 TRIP_A。 如果您再次尝试获取 TRIP_A 的 TripModel 对象, 获得相同的 TripModel 对象。要跟踪 TRIP_B,请获取一个新的 TripModel 对象。

会话状态

会话可能处于以下状态之一:

  • 创建的会话由 Session 对象表示。由您创建 通过调用 create 方法进行会话。例如:

    JourneySharingSession sessionA = JourneySharingSession.createInstance(TripModelA)
    
  • 注册“开始”会话以更新数据和值 界面元素的特点通过调用 start 方法结合使用。例如:

    sessionA.start()
    
  • 系统会自动启动所示会话。显示界面元素 并根据数据更新对它们进行更新您显示一个会话 方法是调用 showSession 方法。例如:

    ConsumerController.showSession(sessionA)
    
  • 已停止的会话停止刷新其数据,并停止更新其 界面元素通过调用 stop 方法来停止会话。 例如:

    sessionA.stop()
    

使用仅数据组件和界面组件

您可以使用仅含数据的组件来创建拼车应用 或按需乘车和送货解决方案提供的界面元素 API。

使用仅包含数据的组件

如需使用纯流量组件创建拼车应用,请执行以下操作:

  • 初始化一个 ConsumerApi 对象。
  • ConsumerApi 获取 TripModelManager 对象。
  • 使用 TripModelManager 开始监控行程,以接收 TripModel 对象。
  • TripModel 对象上注册回调。

以下示例展示了如何使用仅包含数据的组件:

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

使用界面元素 API

使用 ConsumerController 对象访问 按需行程和交付解决方案界面元素 API。

使用按需行程和交付解决方案界面创建拼车应用 元素 API:

  • 初始化 ConsumerApi 对象:
  • ConsumerApi 对象获取 TripModelManager 对象。
  • TripModelManager 获取用于跟踪一次行程的 TripModel 对象。
  • ConsumerMap[View/Fragment] 添加到应用视图。
  • ConsumerMap[View/Fragment] 获取 ConsumerController 对象。
  • 向 Controller 提供 TripModel 对象以获取 JourneySharingSession 对象。
  • 使用 Controller 显示 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();

模块化架构代码更改

如果您的拼车应用使用的是较低版本的消费者 SDK, 更新后的模块化架构将需要对您的代码进行一些更改。 本部分介绍了其中的部分更改。

位置权限

不再需要 FINE_LOCATION 权限 由使用方 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);

重新设置地图中心

地图视图或 fragment 不再缩放至用户的位置 如果没有活跃的会话,将触发初始化。它仍然会 自动缩放以显示正在进行的“旅程分享”会话的时长 因为已启用 AutoCamera 功能。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()