如何使用expo ..在Firebase中插入数据?

时间:2019-06-19 09:35:56

标签: react-native expo

我有一个问题,实际上我想使用来自不同屏幕的expo将数据插入firebase中(我在另一个屏幕中使用google auth,完成后我将进入主屏幕),但它也可以正常工作不是将数据保存到我要存储在哪个表中(在Google身份验证之后,我将数据保存到“用户”中的Firebase中)。

///我正在使用此代码在登录时首先插入数据

//并且我也在使用isUserNew()方法,它的工作真的很好。

    onSignIn = googleUser => {
    console.log('Google Auth Response', googleUser);
    // We need to register an Observer on Firebase Auth to make sure auth is initialized.
    var unsubscribe = firebase.auth().onAuthStateChanged(function(firebaseUser) {
      unsubscribe();
      // Check if we are already signed-in Firebase with the correct user.
      if (!this.isUserEqual(googleUser, firebaseUser)) {
        // Build Firebase credential with the Google ID token.
        var credential = firebase.auth.GoogleAuthProvider.credential(
          googleUser.idToken,
          googleUser.accessToken
        );
        // Sign in with credential from the Google user.
        firebase.auth().signInAndRetrieveDataWithCredential(credential).then(function(result) {
          console.log('user signed in');
          if(result.additionalUserInfo.isNewUser){ 
            firebase.database().ref('/users/' + result.user.uid).set({
              gmail: result.user.email,
              profile_picture: result.additionalUserInfo.profile.picture,
              locale: result.additionalUserInfo.profile.locale,
              first_name: result.additionalUserInfo.profile.given_name,
              last_name: result.additionalUserInfo.profile.family_name,
              created_at: Date.now()
            }).then(function (snapshot){
              // console.log('Snapshot', snapshot);
            });
          }else{
            firebase.database().ref('/users/' + result.user.uid).update({
              last_logged_in: Date.now()
            });
          }
        }).catch(function(error) {
          // Handle Errors here.
          var errorCode = error.code;
          var errorMessage = error.message;
          // The email of the user's account used.
          var email = error.email;
          // The firebase.auth.AuthCredential type that was used.
          var credential = error.credential;
          // ...
        });
      } else {
        console.log('User already signed-in Firebase.');
      }
    }.bind(this));
  };

//此代码还显示了一个错误,我无法从//卸载的组件调用setState。 //:-该功能以及firebase中的update()在另一个屏幕或页面中。

async componentDidMount() {
    try {
      let {status} = await Permissions.getAsync(Permissions.LOCATION);
      if(status !== 'granted'){
        const {status} = await Permissions.askAsync(Permissions.LOCATION);
      }else{
        const watchId = navigator.geolocation.watchPosition(
          ({ coords : {latitude, longitude} }) => this.setState({latitude, longitude}, () => console.log('State:', this.state)),
          (error) => this.setState({ error: error.message }),
          { enableHighAccuracy: true, timeout: 0, maximumAge: 1000, distanceFilter: 1},
        );
        await AsyncStorage.setItem('LiveFeedId', JSON.stringify(watchId));
      }
    }
    catch(err) {
      console.error(error);
    }
  };

/* when I'm using this code it's saving the data but not in 'users' table in  firebase */

firebase.database().ref('users/').update({
   latitude: latitude,
   longitude: longitude,
});

任何人都可以在这里帮助我,我真的是新来的本地人。 我想将我的纬度和经度从另一个屏幕更新为保存用户详细信息的firebase,例如:-'firebase.database()。ref('/ users /'+ result.user.uid)'。

谢谢

0 个答案:

没有答案