iOS開發之集成百度地圖踩過的那些坑(基於 Xcode7.0/iOS9.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相關的操作
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM