开发者教程之地图SDK系列丨第一期:《集成iOS百度地图SDK》

 

Step 1 成为百度地图开发者

 

使用任何地图服务之前,每个开发者必须先访问百度地图开放平台,注册登录成为百度地图开发者,如果您有百度账户,可以直接使用该账户登录百度地图开放平台;如果您还没有百度账号,您需先注册成为百度用户,注册后登录百度地图开放平台即可。

 

Step 2 获取服务秘钥(AK)

 

开发者在集成百度地图后进行地图初始化时,需要调用启动引擎接口-(BOOL)start:(NSString*)key generalDelegate:(id)delegate;其中参数key即为服务秘钥AK。

 

开发者需要访问【百度地图开放平台官网】进行申请AK,进入首页后点击控制台进入开发者应用管理,详细流程如下图所示。

 

申请AK需要您提供引入SDK的程序的Bundle Identifier,AK与您提供的Bundle Identifier一一对应,申请后请妥善保存,详细申请步骤如下图所示。

 

▲打开API控制台,点击创建应用,开始申请服务秘钥。

 

▲填写应用名称、应用类型注意选择“iOS SDK”、正确填写安全码(Bundle Identifier),点击提交,系统将会自动帮您生成相应的开发密钥。

开发者教程之地图SDK系列丨第一期:《集成iOS百度地图SDK》_第1张图片

 

 

▲控制台列表中的【访问应用(ak)】就是您在开发过程中需要用到的开发密钥,请妥善保管。

 

注:密钥被删除后,对应程序中的SDK功能将不可用,误删的ak可以从回收站中找回。

 

Step 3 开发包下载

 

百度地图iOS SDK自v2.7.0版本起( v4.1.0即将发布),向广大开发者提供了 .framework形式的SDK开发包,这种形式的开发包配置简单,使用方便,推荐大家使用。您可以访问 百度地图iOS SDK产品下载页 进行相关下载,您可以在【阅读原文】中选择 “产品下载”,进入该页面。

 

产品下载页提供开发包、示例代码、类参考的下载项目,开发包即为百度地图framwork压缩包,示例代码为使用百度地图的Demo,类参考提供了地图SDK中相关类的说明。

 

您可以选择页面中的【全部下载】下载所有的内容,同时百度地图提供了Bitcode版本的开发包,您可以按照您的应用需求进行对应的下载。您也可以选择只下载【示例代码】和【类参考】。详细下载相关请参考产品下载页,如下图所示:

开发者教程之地图SDK系列丨第一期:《集成iOS百度地图SDK》_第2张图片

 

 

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系列丨第一期:《集成iOS百度地图SDK》_第3张图片

 

▲添加系统依赖库

 

百度地图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”按钮,将库文件添加到工程中,如下图所示:

开发者教程之地图SDK系列丨第一期:《集成iOS百度地图SDK》_第4张图片

 

引入所需的第三方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::uflow()", referenced from: , 或者如下图报红,您可以尝试下面方法解决问题。

(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"中进行如下配置,否则不能调起百度地图客户端。

 

LSApplicationQueriesSchemes

    baidumap

 

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

}

你可能感兴趣的:(地图SDK)