First, download the library from npm:
npm install react-native-maps --save
Then you must install the native dependencies. You can use rnpm
to
add native dependencies automatically:
$ rnpm link
Go to step 4 to configure Google Maps API KEY in Android.
This installation should work in physical devices. For Genymotion, please check installation step 5
or do it manually as described below:
To install using Cocoapods, simply insert the following line into your Podfile
and run pod install
pod 'react-native-maps', :path => '../node_modules/react-native-maps'
- Open your project in XCode, right click on
Libraries
and clickAdd Files to "Your Project Name"
Look undernode_modules/react-native-maps/ios
and addAIRMaps.xcodeproj
. - Add
libAIRMaps.a
to `Build Phases -> Link Binary With Libraries. - Click on
AIRMaps.xcodeproj
inLibraries
and go theBuild Settings
tab. Double click the text to the right ofHeader Search Paths
and verify that it has$(SRCROOT)/../../react-native/React
as well as$(SRCROOT)/../../react-native/Libraries/Image
- if they aren't, then add them. This is so XCode is able to find the headers that theAIRMaps
source files are referring to by pointing to the header files installed within thereact-native
node_modules
directory. - Whenever you want to use it within React code now you can:
var MapView = require('react-native-maps');
- in your
build.gradle
add:
...
dependencies {
...
compile 'com.airbnb.android:react-native-maps:0.7.1'
}
For React Native v0.29.0 or above:
- in your application object, add:
public class MyApplication extends Application implements ReactApplication {
private final ReactNativeHost reactNativeHost = new ReactNativeHost(this) {
@Override protected List<ReactPackage> getPackages() {
return Arrays.asList(
new MainReactPackage(),
new MapsPackage());
}
};
@Override public ReactNativeHost getReactNativeHost() {
return reactNativeHost;
}
}
For older versions of React Native:
@Override protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mReactRootView = new ReactRootView(this);
mReactInstanceManager = ReactInstanceManager.builder()
.setApplication(getApplication())
.setBundleAssetName("index.android.bundle")
.setJSMainModuleName("index.android")
.addPackage(new MainReactPackage())
.addPackage(new MapsPackage()) // <---- and This!
.setUseDeveloperSupport(BuildConfig.DEBUG)
.setInitialLifecycleState(LifecycleState.RESUMED)
.build();
mReactRootView.startReactApplication(mReactInstanceManager, "MyApp", null);
setContentView(mReactRootView);
}
- Specify your Google Maps API Key:
To develop is recommended a Browser Key without refeer restriction. Go to https://console.developers.google.com/apis/credentials to check your credentials.
Add your API key to your manifest file:
<application>
<!-- You will only need to add this meta-data tag, but make sure it's a child of application -->
<meta-data
android:name="com.google.android.geo.API_KEY"
android:value="{{Your Google maps API Key Here}}"/>
</application>
- ensure that you have Google Play Services installed:
- For Genymotion you can follow these instructions.
- For a physical device you need to search on Google 'Google Play Services'. There will be a link that takes you to the play store and from there you will see a button to update it (do not search within the Play Store).
Troubleshooting
If you have a blank map issue, (#118, #176) try the following lines :
On iOS :
You have to link dependencies with rnpm and re-run the build :
rnpm link
react-native run-ios
On Android :
- Set this Stylesheet in your map component
...
const styles = StyleSheet.create({
container: {
position: 'absolute',
top: 0,
left: 0,
right: 0,
bottom: 0,
height: 400,
width: 400,
justifyContent: 'flex-end',
alignItems: 'center',
},
map: {
position: 'absolute',
top: 0,
left: 0,
right: 0,
bottom: 0,
},
});
module.exports = React.createClass({
render: function () {
const { region } = this.props;
console.log(region);
return (
<View style ={styles.container}>
<MapView
style={styles.map}
region={
latitude: 37.78825,
longitude: -122.4324,
latitudeDelta: 0.015,
longitudeDelta: 0.0121,
}
>
</MapView>
</View>
)
}
})
-
Run "android" and make sure every packages is updated.
-
If not installed yet, you have to install the following packages :
- Extras / Google Play services
- Extras / Google Repository
- Android 6.0 (API 23) / Google APIs Intel x86 Atom System Image Rev. 13
-
Check manual installation steps
-
Generate your SHA1 key :
keytool -list -v -keystore ~/.android/debug.keystore -alias androiddebugkey -storepass android -keypass android
-
Go to Google API Console and select your project, or create one.
InOverview -> Google Maps API -> Google Maps Android API
-> Check if it's enabled
Create a new key by clicking onCreate credentials -> API Key -> Android Key
, enter the name of the API key and your SHA1 key, generated before, and create it. Check installation step 4. -
Clean the cache :
watchman watch-del-all
npm cache clean
-
When starting emulator, make sure you have enabled
Wipe user data
. -
Run
react-native run-android
-
At this step it should work, but if not, go to your Google API Console and create a
Browser key
instead of aAndroid key
and go to step 6.