概述
行程前-相关服务
  • 地图展示
    • 概述
    • 地图组件-Android
    • 地图组件-iOS
  • 展示附近车辆
    • 概述
    • 展示附近车辆-Android
    • 展示附近车辆-iOS
  • 选择上车地点
    • 概述
    • 推荐上车点-Android
    • 推荐上车点-iOS
  • 选择目的地
    • 概述
    • 搜索POI-Android
    • 搜索POI-iOS
    • 拖拽选择目的地-Android
    • 拖拽选择目的地-iOS
  • 圈车服务
    • 批量接驾计算
    • 车辆规避限行
  • 一口价
    • 网约车路径规划-订单估价
    • 行驶路线绑定
行程中-相关服务
  • 网约车路线规划
    • 接驾路径规划
    • 送驾路径规划
  • 司乘同显- iOS
    • 概述
    • 快速接入
    • 基础功能
    • 高级功能
    • 使用工具
    • 开发注意事项
  • 司乘同显 - Andorid
    • 概述
    • 快速接入
    • 基础功能
    • 高级功能
    • 使用工具
    • 开发注意事项
  • 司乘同显- HarmonyOS NEXT
    • 概述
    • 快速接入
    • 基础功能
    • 高级功能
    • 使用工具
    • 开发注意事项
行程后-相关服务
  • 客诉判责
    • 订单绕路判断服务
  • 轨迹服务
    • 订单轨迹查询
    • 行驶轨迹计算
其他服务
  • 信息同步
    • 订单信息同步
    • 车辆信息同步
您现在的位置:出行解决方案开发指南行程中-相关服务司乘同显- iOS快速接入

快速接入 最后更新时间: 2022年01月20日

获取key

在初始化前,请确保您已开通高德开发者账号,并且您已为您的 App Key 开通司乘同显服务,App Key的申请及获取请参考:https://lbs.amap.com/api/ios-sdk/guide/create-project/get-key

开通权限

您在高德开放平台创建的应用默认不会启用司乘同显服务。在使用高德提供的司乘同显服务前,需要联系与您对接的商务进行开通。

接入示例

集成SDK

在集成高德司乘同显SDK前,您需要先集成高德基础SDK。

司机端

1、集成基础SDK

cocoaPods配置

在您的项目的 Podfile 中添加:

pod 'AMapNavi'
pod 'AMapSearch'
pod 'AMapFoundation'

注意:

1. 司乘同显SDK对导航等基础SDK有一定版本限制,请根据提示,选择合适的基础SDK版本。

2. 导航SDK自7.2.0版本开始,内部包含了地图SDK的所有功能,所以司机端SDK仅依赖导航SDK即可,不必再引入地图SDK,否则会导致大量符号冲突。

3. 司机端SDK包含乘客端SDK的所有功能,如果您的同一个APP既有司机端的功能,又有乘客端的功能,则您的APP只需集成司机端SDK即可。

手动配置

参考:https://lbs.amap.com/api/ios-sdk/guide/create-project/manual-configuration

2.集成司机端SDK

MASCTXDriverKit 目前只支持手动配置,手动引入依赖库与资源bundle(注意framework中的 MASCTX.bundle需要copy到项目中

参考:https://lbs.amap.com/api/ios-sdk/guide/create-project/manual-configuration

乘客端

1、集成基础SDK

cocoaPods配置

在您的项目的 Podfile 中添加:

pod 'AMap3DMap'
pod 'AMapSearch'

2.集成司乘同显乘客端SDK

MASCTXPassengerKit目前只支持手动配置,手动引入依赖库与资源bundle

参考:https://lbs.amap.com/api/ios-sdk/guide/create-project/manual-configuration


快速接入

在初始化前,请确保您已开通高德开发者账号,并且您已为您的 App Key 开通司乘同显服务,App Key的申请及获取请参考:https://lbs.amap.com/api/ios-sdk/guide/create-project/get-key

设置key

引入基础SDK头文件#import <AMapFoundationKit/AMapFoundationKit.h>并添加如下示例代码,配置您申请的高德Key。

[AMapServices sharedServices].apiKey = @"您的Key";


司机端

设置订单信息

CLLocationCoordinate2D beginCoordinate = CLLocationCoordinate2DMake(39.938212, 116.455139); //三里屯太古里;
CLLocationCoordinate2D endCoordinate = CLLocationCoordinate2DMake(39.987656, 116.265605);   //颐和园
NSString *orderId = [SCTXDemoUtils generateOrderIdWithCurrentDate];
self.orderInfo = [[MASCTXOrderInfo alloc] initWithOrderId:orderId beginCoordinate:beginCoordinate endCoordinage:endCoordinate];


初始化MADriverRouteManager

_sctxDriverManager = [[MADriverRouteManager alloc] initWithMapView:self.driverMapView delegate:self routeUIconfig:self.config orderInfo:self.orderInfo];


切换订单状态

1)订单状态类型

///行程状态
typedef NS_ENUM(NSInteger, MASCTXRouteStatus) {
   MASCTXRouteStatusUnspecified = 0, ///<未指定状态
   MASCTXRouteStatusPickupPassenger = 1, ///<去接乘客
   MASCTXRouteStatusWaitPassenger = 2, ///<等待乘客上车
   MASCTXRouteStatusPassengerOnBoard = 3, ///<乘客已上车
   MASCTXRouteStatusOrderComplete = 4, ///<订单已结束
   MASCTXRouteStatusOffline = 5, ///<离线状态,只走降级策略获取司机位置,内部不做其他请求
};


2)订单状态切换

_sctxDriverManager.status = MASCTXRouteStatusXXX;


乘客端

设置订单信息

CLLocationCoordinate2D beginCoordinate = CLLocationCoordinate2DMake(39.938212, 116.455139); //三里屯太古里;
CLLocationCoordinate2D endCoordinate = CLLocationCoordinate2DMake(39.987656, 116.265605);   //颐和园
NSString *orderId = [SCTXDemoUtils generateOrderIdWithCurrentDate];
self.orderInfo = [[MASCTXOrderInfo alloc] initWithOrderId:orderId beginCoordinate:beginCoordinate endCoordinage:endCoordinate];


初始化MAPassengerRouteManager

_sctxPassengerManager = [[MAPassengerRouteManager alloc] initWithMapView:self.passengerMapView delegate:self routeUIConfig:self.config orderInfo:self.orderInfo];


切换订单状态

1)订单状态类型

///行程状态
typedef NS_ENUM(NSInteger, MASCTXRouteStatus)
{
   MASCTXRouteStatusUnspecified = 0, ///<未指定状态
   MASCTXRouteStatusPickupPassenger = 1, ///<去接乘客
   MASCTXRouteStatusWaitPassenger = 2, ///<等待乘客上车
   MASCTXRouteStatusPassengerOnBoard = 3, ///<乘客已上车
   MASCTXRouteStatusOrderComplete = 4, ///<订单已结束
   MASCTXRouteStatusOffline = 5, ///<离线状态,只走降级策略获取司机位置,内部不做其他请求
};

2)订单状态切换

_sctxPassengerManager.status = MASCTXRouteStatusXXX;


覆盖物样式自定义

司乘同显覆盖物(车、路线、起终点)样式等多种UI元素的自定义,具体参数如下:

@interface MARouteUIConfig : NSObject <NSCopying>
/**
 得到一个默认的RouteUIConfig项(非单例方法)
 @return 默认配置项
 */
+ (MARouteUIConfig *)defaultRouteUIConfig;
///起点标注是否显示气泡,默认NO  (仅适用于司机端)
@property (nonatomic, assign) BOOL showBeginAnnoCallout;
///终点标注是否显示气泡,默认NO    (仅适用于司机端)
@property (nonatomic, assign) BOOL showEndAnnoCallout;
///汽车标注是否显示气泡,默认NO    (仅适用于司机端)
@property (nonatomic, assign) BOOL showCarAnnoCallout;
///是否显示走过的路线,默认为NO。如果设置为YES,则走过路线采用passedTraceImage纹理
@property (nonatomic, assign) BOOL showPassedTrace;
///是否显示步行线,默认为NO。只在乘客端处于MASCTXRouteStatusPickupPassenger和MASCTXRouteStatusWaitPassenger状态有效果(仅适用于乘客端)
@property (nonatomic, assign) BOOL showWalkPolyline;
/*是否自动调整地图显示区域,默认为YES。默认行为:在司机位置回调后,调整地图可视范围以显示carAnnotation和终点annotation。
注意,当前版本内部自动调整不在选中annotation。如果要自定义此行为,请设置此属性为NO,且在routeStatusChangeForManager回调中对地图进行操作,获取添加timer进行自定义操作。
 */
@property (nonatomic, assign) BOOL automaticAdjustMapRegion;
///是否路线有更新时重新调整地图显示区域,默认YES
@property (nonatomic, assign) BOOL forceAdjustMapAfterRouteChange;
///调整地图显示区域时间间隔,默认10s
@property (nonatomic, assign) NSTimeInterval autoAdjustMapTimeInterval;
///调整地图显示区域最大限制zoomLevel,默认17,支持[3,20]. @since 3.3.0
@property (nonatomic, assign) CGFloat autoAdjustMapMaxZoomLevel;
///地图显示区域改变后,自动调整地图时间间隔,默认10s
@property (nonatomic, assign) NSTimeInterval autoAdjustMapAfterRegionChangedTimeInterval;
///默认调整地图时需要设置的padding,默认为(30, 30, 80, 30)
@property (nonatomic, assign) UIEdgeInsets automaticAdjustPadding;
///小车不进行动画的移动距离,单位米。默认为800。
@property (nonatomic, assign) double ignoreCarAnimationDistance;
///设置普通单途经点是否可见,默认为YES @since 3.1.0
@property (nonatomic, assign) BOOL wayPointVisible;
///步行虚线线颜色,默认为blue  (仅适用于乘客端)
@property (nonatomic, strong) UIColor *walklineColor;
///步行虚线线宽,默认 10 (仅适用于乘客端)
@property (nonatomic, assign) CGFloat walklineWidth;
///步行路线纹理,默认为nil,由于步行修改为虚线,如果设置了此纹理,则按纹理线显示(仅适用于乘客端)
@property (nonatomic, strong) UIImage *walkImage;
///乘客图片,默认为空 (仅适用于司机端)
@property (nonatomic, strong) UIImage *passengerImage;
///小车图片,默认为空
@property (nonatomic, strong) UIImage *carImage;
///起点图片,默认为空
@property (nonatomic, strong) UIImage *startImage;
///终点图片,默认为空
@property (nonatomic, strong) UIImage *endImage;
///途经点图片,适用普通订单
@property (nonatomic, strong) UIImage *viaPointImage;
///路线默认纹理
@property (nonatomic, strong) UIImage *defaultImage;
///路况纹理 - 拥堵
@property (nonatomic, strong) UIImage *blockedImage;
///路况纹理 - 非常缓慢
@property (nonatomic, strong) UIImage *verySlowImage;
///路况纹理 - 缓慢
@property (nonatomic, strong) UIImage *slowImage;
///路况纹理 - 畅通
@property (nonatomic, strong) UIImage *goodImage;
///路况纹理 - 未知
@property (nonatomic, strong) UIImage *unknownImage;
///备选路况纹理 - 拥堵
@property (nonatomic, strong) UIImage *unSelectedBlockedImage;
///备选路况纹理 - 非常缓慢
@property (nonatomic, strong) UIImage *unSelectedVerySlowImage;
///备选路况纹理 - 缓慢
@property (nonatomic, strong) UIImage *unSelectedSlowImage;
///备选路况纹理 - 畅通
@property (nonatomic, strong) UIImage *unSelectedGoodImage;
///备选路况纹理 - 未知
@property (nonatomic, strong) UIImage *unSelectedUnknownImage;
///备选路线默认纹理
@property (nonatomic, strong) UIImage *unSelectedDefaultImage;
///已走过路线的纹理,默认为灰色纹理
@property (nonatomic, strong) UIImage *passedTraceImage;
///线宽,默认 18
@property (nonatomic, assign) CGFloat lineWidth;
///设置驾车路线展示层级:是否在地图底图文字标注上面,默认:NO - 在文字标注下面 @since 3.3.0
@property (nonatomic, assign) BOOL driveRoutePolylineDisplayAboveMapLabel;
/// 拼车 默认上车点图片,如此图片和途经点中上车点图片都没有设置,则不显示上车点annotation
@property (nonatomic, strong) UIImage *wayPointImage_on;
/// 拼车 默认下车点图片,如此图片和途经点中下车点图片都没有设置,则不显示下车点annotation
@property (nonatomic, strong) UIImage *wayPointImage_off;
@end

使用注意事项

切换订单状态

设置行程状态会改变地图路线的展示和当前导航的路线,您需要维护司机端和乘客端的状态status一致,否则同显功能会受严重影响,注意:切换状态会触发内部的导航算路逻辑,如果切换为接客、送客状态,算路成功之后,内部会调用开始导航功能(startGPSNavi,如果模拟导航开关startWithEmulatorNavi为YES,则会调用startEmulatorNavi)。

用司机端SDK时,避免外部同时使用导航SDK或者导航组件

一个设备只能导航一条路线,所以司乘同显对象存在期间(尤其是接送状态中),不要再调用导航SDK的算路和导航接口,否则会严重干扰司乘同显内部的路线规划和导航;如果您的其它场景确实需要做单独的算路和路线展示,推荐使用导航SDK7.7.0推出的独立算路接口:independentCalculateDriveRouteWithStartPOIInfo:endPOIInfo:wayPOIInfos:drivingStrategy:callback:callback。

订单改派

订单改派:当前订单指定的司机A,因为各种原因,不能完成订单,继而业务调度平台,重新指定新的司机B来为该订单乘客服务的一种场景。

建议:在改派订单的场景时,改派后强烈建议重新为司机B和乘客端设置新的司乘同显SDK的订单号。

原因:如果订单号不变,司机A和司机B可能会同时向乘客推送路线和位置,导致路线和位置的跳变,引起乘客投诉。

即使司机A在订单被改派后,关闭订单或者释放司乘对象,但由于两个司机端A和B没有直接的通信机制,依然有较大概率出现操作时机不同步,导致司机A和司机B向同一个乘客推送数据的可能。