開發者教程之地圖SDK系列丨第一期:《集成iOS百度地圖SDK》

 

Step 1 成爲百度地圖開發者

 

使用任何地圖服務之前,每個開發者必須先訪問百度地圖開放平臺,註冊登錄成爲百度地圖開發者,如果您有百度賬戶,可以直接使用該賬戶登錄百度地圖開放平臺;如果您還沒有百度賬號,您需先註冊成爲百度用戶,註冊後登錄百度地圖開放平臺即可。

 

Step 2 獲取服務祕鑰(AK)

 

開發者在集成百度地圖後進行地圖初始化時,需要調用啓動引擎接口-(BOOL)start:(NSString*)key generalDelegate:(id<BMKGeneralDelegate>)delegate;其中參數key即爲服務祕鑰AK。

 

開發者需要訪問【百度地圖開放平臺官網】進行申請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<char, std::1::char_traits >::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"中進行如下配置,否則不能調起百度地圖客戶端。


 

<key>LSApplicationQueriesSchemes</key>

<array>

    <string>baidumap</string>

</array>

 

Step 5 Hello BaiduMap

 

▲在您的AppDelegate.h文件中添加BMKMapManager的定義


 

@interface AppDelegate : UIResponder<UIApplicationDelegate> {

       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

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章