digitalbeans
digitalbeans

Reputation: 183

TypeError: undefined is not an object (evaluating 'navigator.geolocation.requestAuthorization')

I am attempting to call:

`navigator.geolocation.requestAuthorization();`

to request geolocation permission.

But, this is resulting in error when running in iOS simulator

This was working at one point, but stopped. I attempted to delete and create a new project. I also tried to uninstall/reinstall node and react-native-cli.

import React, {Fragment, Component} from 'react';
import {
  SafeAreaView,
  StyleSheet,
  ScrollView,
  View,
  Text,
  StatusBar,
} from 'react-native';

import {
  Header,
  LearnMoreLinks,
  Colors,
  DebugInstructions,
  ReloadInstructions,
} from 'react-native/Libraries/NewAppScreen';

export default class App extends Component {

    constructor(props)
    {
        super(props);

        navigator.geolocation.requestAuthorization();
    }

    render() {

        return (

                <View style={styles.MainContainer}>
                <SafeAreaView style={{flex: 1, backgroundColor: '#fff'}}>
                <Text style={styles.sectionTitle}>Hello World!</Text>
                </SafeAreaView>
                </View>

                );
    }
}

const styles = StyleSheet.create({
  MainContainer :{
     justifyContent: 'center',
     flex:1,
     margin: 5,
     marginTop: (Platform.OS === 'ios') ? 20 : 0,
  },
  sectionTitle: {
    fontSize: 24,
    fontWeight: '600',
    color: Colors.black,
  },
});

I am getting this error:

[error][tid:com.facebook.react.JavaScript] TypeError: undefined is not an object (evaluating 'navigator.geolocation.requestAuthorization')

This error is located at:
    in App (at renderApplication.js:40)
    in RCTView (at View.js:35)
    in View (at AppContainer.js:98)
    in RCTView (at View.js:35)
    in View (at AppContainer.js:115)
    in AppContainer (at renderApplication.js:39)

Upvotes: 16

Views: 18259

Answers (5)

naimur978
naimur978

Reputation: 154

I was also dealing with the same issue. Later on, I simply changed the package and everything was fine.

yarn add react-native-geolocation-service
// import Geolocation from '@react-native-community/geolocation';
import Geolocation from 'react-native-geolocation-service';

Upvotes: 0

M_Badrah
M_Badrah

Reputation: 485

you should use @react-native-community/geolocation

first install it

yarn add @react-native-community/geolocation

then import

import Geolocation from '@react-native-community/geolocation';

in your function

Geolocation.setRNConfiguration(config);

Upvotes: 0

KieuThang
KieuThang

Reputation: 1

From RN 0.6 or later, geolocation is not included in the RN core.If you want to use its API, you should do follow the steps in this link: https://github.com/react-native-community/react-native-geolocation

Upvotes: 0

Rajkumar Nagarajan
Rajkumar Nagarajan

Reputation: 1091

Please ensure you have added libRCTGeolocation.a in Build Phases --> Link Binary With Libraries on your Xcode Project settings and RCTGeolocation.xcodeproj under Libraries of your Xcode project.

Upvotes: 0

sachin mathew
sachin mathew

Reputation: 1457

geolocation has been extracted from react native .60 version. If you need an alternative solution

install react-native-community/geolocation

npm install @react-native-community/geolocation --save


react-native link @react-native-community/geolocation

then

IOS

You need to include the NSLocationWhenInUseUsageDescription key in Info.plist to enable geolocation when using the app. In order to enable geolocation in the background, you need to include the 'NSLocationAlwaysUsageDescription' key in Info.plist and add location as a background mode in the 'Capabilities' tab in Xcode.

Android

To request access to location, you need to add the following line to your app's AndroidManifest.xml

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

usage

import Geolocation from '@react-native-community/geolocation';

Geolocation.getCurrentPosition(info => console.log(info));

Upvotes: 36

Related Questions