一
Step 1 成为百度地图开发者
使用任何地图服务之前,每个开发者必须先访问百度地图开放平台,注册登录成为百度地图开发者,如果您有百度账户,可以直接使用该账户登录百度地图开放平台;如果您还没有百度账号,您需先注册成为百度用户,注册后登录百度地图开放平台即可。
二
Step 2 获取服务秘钥(AK)
开发者在集成百度地图后进行地图初始化时,需要调用启动引擎接口-(BOOL)start:(NSString*)key generalDelegate:(id
开发者需要访问【百度地图开放平台官网】进行申请AK,进入首页后点击控制台进入开发者应用管理,详细流程如下图所示。
申请AK需要您提供引入SDK的程序的Bundle Identifier,AK与您提供的Bundle Identifier一一对应,申请后请妥善保存,详细申请步骤如下图所示。
▲打开API控制台,点击创建应用,开始申请服务秘钥。
▲填写应用名称、应用类型注意选择“iOS SDK”、正确填写安全码(Bundle Identifier),点击提交,系统将会自动帮您生成相应的开发密钥。
▲控制台列表中的【访问应用(ak)】就是您在开发过程中需要用到的开发密钥,请妥善保管。
注:密钥被删除后,对应程序中的SDK功能将不可用,误删的ak可以从回收站中找回。
三
Step 3 开发包下载
百度地图iOS SDK自v2.7.0版本起( v4.1.0即将发布),向广大开发者提供了 .framework形式的SDK开发包,这种形式的开发包配置简单,使用方便,推荐大家使用。您可以访问 百度地图iOS SDK产品下载页 进行相关下载,您可以在【阅读原文】中选择 “产品下载”,进入该页面。
产品下载页提供开发包、示例代码、类参考的下载项目,开发包即为百度地图framwork压缩包,示例代码为使用百度地图的Demo,类参考提供了地图SDK中相关类的说明。
您可以选择页面中的【全部下载】下载所有的内容,同时百度地图提供了Bitcode版本的开发包,您可以按照您的应用需求进行对应的下载。您也可以选择只下载【示例代码】和【类参考】。详细下载相关请参考产品下载页,如下图所示:
四
Step 4 手动部署工程环境(Objective-C)
下面我们正式开始百度地图SDK集成工作,首先您需要创建一个项目,然后按照下面步骤手动部署配置您的项目。
百度地图 iOS SDK 采用分包的形式提供 .framework包,其中 BaiduMapAPI_Base.framework 为基础包,使用SDK的任何功能都需要导入此包,其他分包按照需求您可以自行选择。这里需要您注意:使用时请确保各个分包的版本保持一致。
各个分包包含的功能如下:(其中*号标记为必选包)
开发包文件 | 功能包内容 |
---|---|
BaiduMapAPI_Base.framework | *基础包 |
BaiduMapAPI_Map.framework | 地图功能包 |
BaiduMapAPI_Search.framework | 检索功能包 |
BaiduMapAPI_Cloud.framework | 云检索功能包 |
BaiduMapAPI_Utils.framework | 工具功能包 |
BaiduMapAPI_Radar.framework | 周边雷达工具包 |
BaiduMapAPI_Location.framework | 定位功能包 |
BaiduMapAPI_WalkNavi.framework | 步骑行导航包(v4.1.1即将上线) |
thirdlibs | 第三方openssl静态库用于支持https,版本v1.0.2e |
▲添加百度地图库(.framework)
选择好您需要的分包后,将所需的BaiduMapAPI_**.framework拷贝或者拖拽到工程所在文件夹下。
导入百度地图开发包方法如下: 左侧目录选中工程名,在 TARGETS -> Build Phases -> Link Binary With Libaries中点击“+”按钮,在弹出的窗口中点击“Add Other”按钮,选择 BaiduMapAPI_**.framework 添加到工程中,如下图所示:
▲添加系统依赖库
百度地图SDK中提供了定位功能和动画效果,v2.0.0版本开始使用OpenGL渲染,即将上线的v4.1.1提供了步骑行导航功能,因此您需要在您的Xcode工程需引入的11个系统库如下:
引入的必备的库:
CoreLocation.framework,
QuartzCore.framework,
OpenGLES.framework,
SystemConfiguration.framework,
CoreGraphics.framework,
Security.framework。
下面三个库是v2.9.0新增的系统库,使用v2.9.0及以上版本的地图SDK,务必增加:
CoreTelephony.framework,
libsqlite3.0.tbd(xcode7以前为 libsqlite3.0.dylib),
libstdc++.6.0.9.tbd(xcode7以前为libstdc++.6.0.9.dylib。
下面两个库分别是即将上线的v4.1.0升级检索组件和v4.1.1步骑行导航需要添加的库:
MobileCoreServices.framework,
CoreMotion.framwork。
说明:
SystemConfiguration.framework、CoreTelephonySecurity.framework、Security.framework 是为了统计app信息使用。
引入系统库的操作如下:左侧目录中选中工程名,在TARGETS -> Build Phases -> Link Binary With Libaries中点击“+”按钮,在弹出的窗口中查找并选择所需的库,单击“Add”按钮,将库文件添加到工程中,如下图所示:
▲引入所需的第三方openssl库
添加支持HTTPS所需的openssl静态库:libssl.a和libcrypto.a(SDK打好的包存放于thirdlib目录下)。
添加openssl库方法如下: 在 TARGETS -> Build Phases -> Link Binary With Libaries中点击“+”按钮,在弹出的窗口中点击“Add Other”按钮,选择libssl.a和libcrypto.a添加到工程中。
▲引入mapapi.bundle资源文件
地图基础功能的使用需要添加mapapi.bundle资源文件,其中存储了定位、默认大头针标注View及路线关键点的资源图片,还存储了矢量地图绘制必需的资源文件,资源文件存放在BaiduMapAPI_Map.framework/Resources中。
如果您不需要使用内置的图片显示功能,则可以删除bundle文件中的image文件夹,您也可以根据具体需求任意替换或删除该bundle中image文件夹的图片文件。
导入资源文件添加方法: 在左侧目前选中工程名,在右键菜单中选择 Add Files to “工程名”…,从 BaiduMapAPI_Map.framework/Resources 文件中选择 mapapi.bundle 文件,并勾选 “Copy items if needed” 复选框,单击“Add”按钮,将资源文件添加到工程中。
▲其他环境配置项
1. 静态库中采用Objective-C++实现,因此需要您保证您工程中至少有一个.mm后缀的源文件(您可以将任意一个.m后缀的文件改名为.mm),或者在工程属性中指定编译方式,即在Xcode的Project -> Edit Active Target -> Build Setting 中找到 Compile Sources As,并将其设置为"Objective-C++"。
2. 如果Xcode控制台打印manager start failed : info.plist 中必须添加 Bundle display name错误日志,这里是提示您需要在你App的.plist文件中填写您的App名称。
3. 在您集成百度地图SDK,编译过程中如出现类似的红色警告:"std::1::basic_streambuf
(1).Xcode的Project -> Edit Active Target -> Build Setting 中找到 Compile Sources As,并将其设置为"Objective-C++"是否设置正确。
(2).Xcode的Project -> Edit Active Target -> General -> Deployment Info 中找到 Deployment Target,并将其版本设置为大于7.0版本。
4. 如果在iOS9中使用了调起百度地图客户端功能,必须在"Info.plist"中进行如下配置,否则不能调起百度地图客户端。
五
Step 5 Hello BaiduMap
▲在您的AppDelegate.h文件中添加BMKMapManager的定义
@interface AppDelegate : UIResponder
UINavigationController *navigationController;
BMKMapManager* _mapManager;
}
▲在您的AppDelegate.m文件中添加对BMKMapManager的初始化,并填入您申请的授权Key,示例如下:
- (BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // 要使用百度地图,请先启动BaiduMapManager
_mapManager = [[BMKMapManager alloc]init];
// 如果要关注网络及授权验证事件,请设定 generalDelegate参数
BOOL ret = [_mapManager start:@"在此处输入您的授权Key" generalDelegate:nil];
if (!ret) {
NSLog(@"manager start failed!");
}
// Add the navigation controller's view to the window and display.
[self.window addSubview:navigationController.view];
[self.window makeKeyAndVisible];
return YES;
}
▲在您的ViewController.m文件中添加BMKMapView的创建代码,示例如下:
- (void)viewDidLoad {
[super viewDidLoad];
BMKMapView* mapView = [[BMKMapView alloc]initWithFrame:self.view.bounds];
self.view = mapView;
}
▲自2.0.0起,BMKMapView新增viewWillAppear、viewWillDisappear方法来控制BMKMapView的生命周期,并且在一个时刻只能有一个BMKMapView接受回调消息,因此在使用BMKMapView的viewController中需要在viewWillAppear、viewWillDisappear方法中调用BMKMapView的对应的方法,并处理delegate,代码如下:
-(void)viewWillAppear:(BOOL)animated
{
[_mapView viewWillAppear];
_mapView.delegate = self; // 此处记得不用的时候需要置nil,否则影响内存的释放
}
-(void)viewWillDisappear:(BOOL)animated
{
[_mapView viewWillDisappear];
_mapView.delegate = nil; // 不用时,置nil
}