快速接入 最后更新时间: 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向同一个乘客推送数据的可能。

