Mapbox Navigation SDK for iOS
Mapbox Navigation 提供了您在 iOS 应用程序中添加语音导航所需的所有工具。
通过我们的内置语音导航 NavigationViewController
,可以在几分钟内开始运行,或使用我们的路由和导航核心组件构建完全定制的语音导航应用程序。
功能
- 适用于 iPhone、iPad 和 CarPlay 的完整语音导航 UI,可直接嵌入您的应用程序
- 专业设计地图样式,适用于白天和夜间驾驶
- 支持全球驾驶、骑行和步行路线,由 开源数据 和用户反馈提供支持
- 基于 超过 55 个国家的实时条件 避免拥堵和主动重新路由
- 由 Amazon Polly 提供的自然语音转向指令(无需配置)
- 支持超过 20 种语言
文档
需求
Mapbox导航SDK和核心导航库与使用Swift 5.5及以上版本编写、Xcode 13.1及以上版本编译的应用程序兼容。Mapbox导航和Mapbox核心导航库支持iOS 12.0及以上版本。
Mapbox导航SDK也适用于Android平台。更多信息
安装
使用Swift包管理器
要使用Swift包管理器安装MapboxNavigation框架,请访问Swift包管理器
-
访问您的Mapbox账户控制台,创建一个具有
DOWNLOADS:READ
范围的访问令牌。**请注意**:这不同于您的生产环境Mapbox API token。请确保将其保密,并不要将其插入任何Info.plist文件中。如果您的家目录中尚不存在,请创建一个名为.netrc
的文件,然后在文件末尾添加以下行machine api.mapbox.com login mapbox password PRIVATE_MAPBOX_API_TOKEN
其中PRIVATE_MAPBOX_API_TOKEN是具有
DOWNLOADS:READ
范围的Mapbox API token。 -
在Xcode中,转到文件(File) -> Swift包(Swift Packages) -> 添加依赖关系(Add Package Dependency)。
-
将
https://github.com/mapbox/mapbox-navigation-ios.git
作为软件包仓库输入,然后点击“下一步”。 -
设置规则为“版本”,“直到下一个主版本”,并将最低版本要求输入为
2.14.0
,然后点击“下一步”。
要在其他软件包而非应用程序中安装 MapboxNavigation 框架,请运行 swift package init
来创建一个 Package.swift,然后添加以下依赖项:
// Latest stable release
.package(name: "MapboxNavigation", url: "https://github.com/mapbox/mapbox-navigation-ios.git", from: "2.14.0")
// Latest prerelease
.package(name: "MapboxNavigation", url: "https://github.com/mapbox/mapbox-navigation-ios.git", .exact("2.14.0-rc.1"))
使用 CocoaPods
要使用 CocoaPods 安装 MapboxNavigation 框架
-
访问您的Mapbox账户控制台,创建一个具有
DOWNLOADS:READ
范围的访问令牌。**请注意**:这不同于您的生产环境Mapbox API token。请确保将其保密,并不要将其插入任何Info.plist文件中。如果您的家目录中尚不存在,请创建一个名为.netrc
的文件,然后在文件末尾添加以下行machine api.mapbox.com login mapbox password PRIVATE_MAPBOX_API_TOKEN
其中PRIVATE_MAPBOX_API_TOKEN是具有
DOWNLOADS:READ
范围的Mapbox API token。 -
创建一个带有以下指定的 Podfile
# Latest stable release pod 'MapboxCoreNavigation', '~> 2.14' pod 'MapboxNavigation', '~> 2.14' # Latest prerelease pod 'MapboxCoreNavigation', :git => 'https://github.com/mapbox/mapbox-navigation-ios.git', :tag => 'v2.14.0-rc.1' pod 'MapboxNavigation', :git => 'https://github.com/mapbox/mapbox-navigation-ios.git', :tag => 'v2.14.0-rc.1'
-
运行
pod repo update && pod install
并打开生成的 Xcode 工作区域。
使用 Carthage
要使用 0.38 或更高版本的 Carthage 安装 MapboxNavigation 框架
-
访问您的Mapbox账户控制台,创建一个具有
DOWNLOADS:READ
范围的访问令牌。**请注意**:这不同于您的生产环境Mapbox API token。请确保将其保密,并不要将其插入任何Info.plist文件中。如果您的家目录中尚不存在,请创建一个名为.netrc
的文件,然后在文件末尾添加以下行machine api.mapbox.com login mapbox password PRIVATE_MAPBOX_API_TOKEN
其中PRIVATE_MAPBOX_API_TOKEN是具有
DOWNLOADS:READ
范围的Mapbox API token。 -
(可选) 清除你的 Carthage 缓存
rm -rf ~/Library/Caches/carthage/ ~/Library/Caches/org.carthage.CarthageKit/binaries/{MapboxCommon-ios,MapboxNavigationNative,mapbox-ios-sdk-dynamic}
-
创建一个带有以下依赖项的 Cartfile
# Latest stable release github "mapbox/mapbox-navigation-ios" ~> 2.14 # Latest prerelease github "mapbox/mapbox-navigation-ios" "v2.14.0-rc.1"
-
运行
carthage bootstrap --platform iOS --use-xcframeworks --cache-builds --use-netrc
。 -
遵循 Carthage 的 iOS 集成说明。您的应用程序目标的目标“嵌入框架”构建阶段应包括
MapboxCoreNavigation.xcframework
、MapboxNavigationNative.xcframework
和MapboxCommon.xcframework
。
自 v2.0.0-alpha.1 版本起,MapboxNavigation 不再支持 Carthage。但是,如果您从头开始构建用户界面,您可以仅使用 Carthage 安装 MapboxCoreNavigation 框架。
配置
-
Mapbox API 和矢量瓦片需要一个 Mapbox 账户和 API 访问令牌。在项目编辑器中选择应用程序目标,然后转到“信息”选项卡。在“自定义 iOS 目标属性”部分下,将
MBXAccessToken
设置为您访问令牌。您可以从 Mapbox 账户页面 获取访问令牌。 -
为了确保SDK能够在用户沿着路线移动时跟踪用户的位置,将
NSLocationWhenInUseUsageDescription
设置为显示您的位置在地图上并有助于改进地图。
-
用户期望SDK即使在其他应用程序可见或设备锁定的情况下,也能持续跟踪用户的位置并发出语音指令。转到“签名与能力”标签页。在“后台模式”部分,启用“音频、AirPlay和画中画”以及“位置更新”。(或者,将
现在导入相关模块,并呈现一个新的NavigationViewController
。如果您应用程序的UI是用Interface Builder布局的,您也可以从故事板中推送一个导航视图控制器。
import MapboxDirections
import MapboxCoreNavigation
import MapboxNavigation
// Define two waypoints to travel between
let origin = Waypoint(coordinate: CLLocationCoordinate2D(latitude: 38.9131752, longitude: -77.0324047), name: "Mapbox")
let destination = Waypoint(coordinate: CLLocationCoordinate2D(latitude: 38.8977, longitude: -77.0365), name: "White House")
// Set options
let routeOptions = NavigationRouteOptions(waypoints: [origin, destination])
// Request a route using MapboxDirections
Directions.shared.calculate(routeOptions) { [weak self] (session, result) in
switch result {
case .failure(let error):
print(error.localizedDescription)
case .success(let response):
guard let strongSelf = self else {
return
}
// Pass the generated route response to the the NavigationViewController
let viewController = NavigationViewController(for: response, routeIndex: 0, routeOptions: routeOptions)
viewController.modalPresentationStyle = .fullScreen
strongSelf.present(viewController, animated: true, completion: nil)
}
}
有关更多信息,请参阅API参考。
示例
API参考包含执行常见任务的示例代码。您可以在navigation-ios-examples项目中运行这些示例。
此存储库还包括一个用于测试各种导航SDK功能的测试床应用程序。有关安装和运行此应用程序的说明,请参阅贡献指南。
自定义
样式
您可以根据需要自定义外观,以与您的应用融为一体。查看DayStyle.swift
以获取所有可样式化元素。
class CustomStyle: DayStyle {
required init() {
super.init()
mapStyleURL = URL(string: "mapbox://styles/mapbox/satellite-streets-v9")!
styleType = .nightStyle
}
override func apply() {
super.apply()
BottomBannerView.appearance(for: UITraitCollection(userInterfaceIdiom: .phone)).backgroundColor = .orange
BottomBannerView.appearance(for: UITraitCollection(userInterfaceIdiom: .pad)).backgroundColor = .orange
}
}
然后使用您自己的样式或样式初始化NavigationViewController。
let navigationOptions = NavigationOptions(styles: [CustomStyle()])
NavigationViewController(for: routeResponse, routeIndex: routeIndex, routeOptions: routeOptions, navigationOptions: navigationOptions)
从头开始
如果你的应用程序需要完全定制的功能,例如仅语音体验或非常规用户界面,请参阅核心导航安装指南。
贡献
我们欢迎反馈和代码贡献!有关详细信息,请参阅CONTRIBUTING.md。
许可协议
Mapbox Navigation SDK for iOS遵循Mapbox服务条款发布。有关详细信息,请参阅LICENSE.md。