iOS開發之整合百度地圖踩過的那些坑(基於 Xcode7.0/iOS9.2),xcode7.0ios9.2
本篇分4步講述如何在項目中整合百度地圖:
第一步:建立項目第二步:利用 cocoaPod 匯入百度地圖的 SDK(pod 'BaiduMapKit' #百度地圖SDK)第三步:在 pch 檔案中匯入標頭檔和秘鑰
秘鑰是在 http://lbsyun.baidu.com/apiconsole/key 百度開放平台申請。
#define APPKEY @"UzyiXewPsqPhcE1yS8wxqik9"
在使用SDK的類時按需引入下邊的標頭檔
#import <BaiduMapAPI_Base/BMKBaseComponent.h>//引入base相關所有的標頭檔 #import <BaiduMapAPI_Map/BMKMapComponent.h>//引入地圖功能所有的標頭檔 #import <BaiduMapAPI_Search/BMKSearchComponent.h>//引入檢索功能所有的標頭檔 #import <BaiduMapAPI_Cloud/BMKCloudSearchComponent.h>//引入雲檢索功能所有的標頭檔 #import <BaiduMapAPI_Location/BMKLocationComponent.h>//引入定位功能所有的標頭檔 #import <BaiduMapAPI_Utils/BMKUtilsComponent.h>//引入計算工具所有的標頭檔 #import <BaiduMapAPI_Radar/BMKRadarComponent.h>//引入周邊雷達功能所有的標頭檔 #import < BaiduMapAPI_Map/BMKMapView.h>//只引入所需的單個標頭檔
第四步:在AppDelegate.m檔案中載入地圖管理者
- (BMKMapManager *)mapManager { if (!_mapManager) { _mapManager = [[BMKMapManager alloc] init]; BOOL ret = [_mapManager start:APPKEY generalDelegate:nil]; if (!ret) { NSLog(@"manager start failed!"); } else { NSLog(@"manager start success!"); } } return _mapManager;}- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // Override point for customization after application launch. [self mapManager]; return YES;}
到此步,我們就可以正常運行百度地圖了。
但是,需要注意的是在控制台上會輸出以下資訊:
那麼我們按照要求一步步來就是了,首先在 plist 檔案中配置 Bundle display name,其實這是在Xcode6中需要配置的資訊,Xcode7中並沒有要求
<key>CFBundleDisplayName</key><string>$(PRODUCT_NAME)</string>
再次運行,地圖管理者便載入成功了,但是由於iOS9改用更安全的https,為了能夠在iOS9中正常使用百度地圖SDK,此時還需注入 ATS
<key>NSAppTransportSecurity</key><dict> <key>NSAllowsArbitraryLoads</key> <true/></dict>
此時雖然不會報錯,管理者同樣載入成功了,地圖的網格也有了,但是地圖詳細資料貌似不能顯示出來了。
這時檢查一下你的 key 是否正確,我是犯過一次,一定以保證申請 key 是的安全碼與項目的Bundle Identifier保持一致。
這時百度地圖便算是成功整合了。
注意:本篇文章中為說明的地方均未進行配置。
app在前後台切換時,需要使用下面的代碼停止地圖的渲染和openGL的繪製:
- (void)applicationWillResignActive:(UIApplication *)application { [BMKMapView willBackGround];//當應用即將後台時調用,停止一切調用opengl相關的操作}- (void)applicationDidBecomeActive:(UIApplication *)application { [BMKMapView didForeGround];//當應用恢複前台狀態時調用,回複地圖的渲染和opengl相關的操作}