react-native-baidu-map iOS端集成

最近有很多網(wǎng)友在問RN上怎么集成百度地圖,我在之前兩個項(xiàng)目中都有使用到react-native-baidu-map,覺得其中的步驟稍微有點(diǎn)復(fù)雜随常,如果哪一步有點(diǎn)疏漏,就很容易報錯肩榕,接下來我就從零新建一個項(xiàng)目塘雳,一步一步記錄下我安裝的過程匾效,希望能幫助到大家~


成都React-Native交流群舷蟀,進(jìn)群給管理,先到先得哦


react-native-baidu-map github地址


1.新建一個RN項(xiàng)目:(BaiDuMapTest)


圖片.png

出現(xiàn)以下界面面哼,就表示新建項(xiàng)目成功了

圖片.png

2.安裝react-native-baidu-map(注意:一定要在項(xiàng)目根目錄下進(jìn)行安裝):


在終端輸入:
npm install react-native-baidu-map --save

圖片.png

3.Xcode配置:


圖片.png
圖片.png

Build Phases->Link Binary With Libraries 加入 libRCTBaiduMap.a

圖片.png

Build Settings->Search Paths野宜, Framework search paths 添加$(PROJECT_DIR)/../node_modules/react-native-baidu-map/ios/lib,Header search paths 添加 $(SRCROOT)/../node_modules/react-native-baidu-map/ios/RCTBaiduMap

圖片.png
圖片.png

添加依賴, react-native-baidu-map/ios/lib 下的全部 framwordk:

圖片.png

方法:

圖片.png
圖片.png
圖片.png
圖片.png

然后繼續(xù)添加:CoreLocation.framework和QuartzCore.framework、OpenGLES.framework魔策、SystemConfiguration.framework匈子、CoreGraphics.framework、Security.framework代乃、libsqlite3.0.tbd(xcode7以前為 libsqlite3.0.dylib)、CoreTelephony.framework 仿粹、libstdc++.6.0.9.tbd(xcode7以前為libstdc++.6.0.9.dylib)
例如:

圖片.png

全部添加完后:

圖片.png

接下來添加 BaiduMapAPI_Map.framework/Resources/mapapi.bundle

圖片.png
圖片.png
圖片.png

4.AppDelegate.m init 初始化


#import "RCTBaiduMapViewManager.h"
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    ...
    [RCTBaiduMapViewManager initSDK:@"api key"];//這里的api key 一定要在官網(wǎng)和APP的Bundle identifier對應(yīng)搁吓,否則地圖會顯示失敗
    ...
}
圖片.png

5.build一下,看看是否配置成功


此時可能會報這個錯誤:

圖片.png

解決辦法:

#import "RCTViewManager.h"
#import "RCTConvert+CoreLocation.h"

改成

#import <React/RCTViewManager.h>
#import <React/RCTConvert+CoreLocation.h>

如圖:

圖片.png

然后就build success啦~

6.到此為止吭历,配置已經(jīng)完成堕仔,我們可以在RN來玩一玩百度地圖~


這里我們就參照官網(wǎng)的Demo給大家展示一下:

index.ios.js:

/**
 * Sample React Native App
 * https://github.com/facebook/react-native
 * @flow
 */

import React, { Component } from 'react';
import {
  AppRegistry,
  StyleSheet,
  Text,
  View
} from 'react-native';

import BaiduMapDemo from './BaiduMapDemo';

export default class BaiDuMapTest extends Component {
  render() {
    return (
      <BaiduMapDemo />
    );
  }
}

const styles = StyleSheet.create({
  container: {
    flex: 1,
    justifyContent: 'center',
    alignItems: 'center',
    backgroundColor: '#F5FCFF',
  },
  welcome: {
    fontSize: 20,
    textAlign: 'center',
    margin: 10,
  },
  instructions: {
    textAlign: 'center',
    color: '#333333',
    marginBottom: 5,
  },
});

AppRegistry.registerComponent('BaiDuMapTest', () => BaiDuMapTest);

BaiduMapDemo.js

/**
 * @author lovebing
 */

import React, {
  Component,
  PropTypes
} from 'react';

import {
  MapView,
  MapTypes,
  Geolocation
} from 'react-native-baidu-map';

import {
  Button,
  AppRegistry,
  StyleSheet,
  Text,
  View,
  TouchableHighlight
} from 'react-native';

import Dimensions from 'Dimensions';

export default class BaiduMapDemo extends Component {

  constructor() {
    super();

    this.state = {
      mayType: MapTypes.NORMAL,
      zoom: 15,
      center: {
        longitude: 113.981718,
        latitude: 22.542449
      },
      trafficEnabled: false,
      baiduHeatMapEnabled: false,
      markers: [{
        longitude: 113.981718,
        latitude: 22.542449,
        title: "Window of the world"
      },{
        longitude: 113.995516,
        latitude: 22.537642,
        title: ""
      }]
    };
  }

  componentDidMount() {
  }

  render() {
    return (
      <View style={styles.container}>
        <MapView 
          trafficEnabled={this.state.trafficEnabled}
          baiduHeatMapEnabled={this.state.baiduHeatMapEnabled}
          zoom={this.state.zoom}
          mapType={this.state.mapType}
          center={this.state.center}
          marker={this.state.marker}
          markers={this.state.markers}
          style={styles.map}
          onMarkerClick={(e) => {
            console.warn(JSON.stringify(e));
          }}
          onMapClick={(e) => {
          }}
        >
        </MapView>

        <View style={styles.row}>
          <Button title="Normal" onPress={() => {
            this.setState({
              mapType: MapTypes.NORMAL
            });
          }} />
          <Button style={styles.btn} title="Satellite" onPress={() => {
            this.setState({
              mapType: MapTypes.SATELLITE
            });
          }} />

          <Button style={styles.btn} title="Locate" onPress={() => {
            console.warn('center', this.state.center);
            Geolocation.getCurrentPosition()
              .then(data => {
                console.warn(JSON.stringify(data));
                this.setState({
                  zoom: 15,
                  marker: {
                    latitude: data.latitude,
                    longitude: data.longitude,
                    title: 'Your location'
                  },
                  center: {
                    latitude: data.latitude,
                    longitude: data.longitude,
                    rand: Math.random()
                  }
                });
              })
              .catch(e =>{
                console.warn(e, 'error');
              })
          }} />
        </View>

        <View style={styles.row}>
          <Button title="Zoom+" onPress={() => {
            this.setState({
              zoom: this.state.zoom + 1
            });
          }} />
          <Button title="Zoom-" onPress={() => {
            if(this.state.zoom > 0) {
              this.setState({
                zoom: this.state.zoom - 1
              });
            }
            
          }} />
        </View>

        <View style={styles.row}>
          <Button title="Traffic" onPress={() => {
            this.setState({
              trafficEnabled: !this.state.trafficEnabled
            });
          }} />

          <Button title="Baidu HeatMap" onPress={() => {
            this.setState({
              baiduHeatMapEnabled: !this.state.baiduHeatMapEnabled
            });
          }} />
        </View>
      </View>
    );
  }
}

const styles = StyleSheet.create({
  row: {
    flexDirection: 'row',
    height: 40
  },
  container: {
    flex: 1,
    justifyContent: 'flex-start',
    alignItems: 'center',
    backgroundColor: '#F5FCFF',
  },
  map: {
    width: Dimensions.get('window').width,
    height: Dimensions.get('window').height - 200,
    marginBottom: 16
  }
});

效果圖:

圖片.png

希望這篇文章能幫助到大家,謝謝~


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末晌区,一起剝皮案震驚了整個濱河市摩骨,隨后出現(xiàn)的幾起案子通贞,更是在濱河造成了極大的恐慌,老刑警劉巖恼五,帶你破解...
    沈念sama閱讀 216,470評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件昌罩,死亡現(xiàn)場離奇詭異,居然都是意外死亡灾馒,警方通過查閱死者的電腦和手機(jī)茎用,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來睬罗,“玉大人轨功,你說我怎么就攤上這事∪荽铮” “怎么了古涧?”我有些...
    開封第一講書人閱讀 162,577評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長花盐。 經(jīng)常有香客問我羡滑,道長,這世上最難降的妖魔是什么卒暂? 我笑而不...
    開封第一講書人閱讀 58,176評論 1 292
  • 正文 為了忘掉前任啄栓,我火速辦了婚禮,結(jié)果婚禮上也祠,老公的妹妹穿的比我還像新娘昙楚。我一直安慰自己,他們只是感情好诈嘿,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,189評論 6 388
  • 文/花漫 我一把揭開白布堪旧。 她就那樣靜靜地躺著,像睡著了一般奖亚。 火紅的嫁衣襯著肌膚如雪淳梦。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,155評論 1 299
  • 那天昔字,我揣著相機(jī)與錄音爆袍,去河邊找鬼。 笑死作郭,一個胖子當(dāng)著我的面吹牛陨囊,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播夹攒,決...
    沈念sama閱讀 40,041評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼蜘醋,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了咏尝?” 一聲冷哼從身側(cè)響起压语,我...
    開封第一講書人閱讀 38,903評論 0 274
  • 序言:老撾萬榮一對情侶失蹤啸罢,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后胎食,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體扰才,經(jīng)...
    沈念sama閱讀 45,319評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,539評論 2 332
  • 正文 我和宋清朗相戀三年斥季,在試婚紗的時候發(fā)現(xiàn)自己被綠了训桶。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,703評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡酣倾,死狀恐怖舵揭,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情躁锡,我是刑警寧澤午绳,帶...
    沈念sama閱讀 35,417評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站映之,受9級特大地震影響拦焚,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜杠输,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,013評論 3 325
  • 文/蒙蒙 一赎败、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧蠢甲,春花似錦僵刮、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至曼追,卻和暖如春窍仰,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背礼殊。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評論 1 269
  • 我被黑心中介騙來泰國打工驹吮, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人晶伦。 一個月前我還...
    沈念sama閱讀 47,711評論 2 368
  • 正文 我出身青樓碟狞,卻偏偏與公主長得像,于是被迫代替她去往敵國和親坝辫。 傳聞我的和親對象是個殘疾皇子篷就,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,601評論 2 353

推薦閱讀更多精彩內(nèi)容

  • React Native優(yōu)秀博客射亏,以及優(yōu)秀的Github庫列表(很多英文資料源自于[awesome-react-n...
    董董董董董董董董董大笨蛋閱讀 10,608評論 4 162
  • 持續(xù)更新中...... 一套企業(yè)級的 UI 設(shè)計(jì)語言和 React 實(shí)現(xiàn)近忙。 https://mobile.ant....
    日不落000閱讀 5,681評論 0 35
  • 最近公司需要在app上使用地圖組件加載地圖竭业,從網(wǎng)上找了很多第三方都不是很理想,總會有ios和Android不兼容的...
    sybil052閱讀 13,189評論 20 19
  • 需求: 最近準(zhǔn)備在公司項(xiàng)目中使用RN及舍,但羅馬不是一天建成的未辆,沒辦法將項(xiàng)目中所有的代碼都換成RN,而且我也不認(rèn)為全換...
    掛著鈴鐺的兔閱讀 8,864評論 20 37
  • 世上根本就沒有捷徑可言锯玛、超越難度越大的事物咐柜、離成功的把握就越大,越簡單越容易的攘残、保質(zhì)期就越短拙友、這就是難易的基本規(guī)律...
    鴻淑企劃閱讀 211評論 0 0