从fbsdk获取数据反应原生

时间:2017-07-25 07:53:06

标签: android facebook react-native react-native-android react-native-fbsdk

您好我已经在我的本机应用程序中实现了Facebook登录。我没有使用sdk附带的标准按钮。一切正常,登录成功。但现在我不知道如何从Facebook用户档案中提取数据,即姓名,电子邮件。

以下是我的代码

_fbAuth() {
        LoginManager.logInWithReadPermissions(['public_profile']).then(function (result) {
            if (result.isCancelled) {
                console.log('Login was Cancelled');
            } else {

                        const { navigate } = this.props.navigation;

                //
              console.log('Login Successful' + result.grantedPermissions.toString());



            }
        }, function (error) {
            console.log('An error has occured' + error);
        })
    }

按钮代码

<TouchableHighlight onPress={() => { this._fbAuth() }}>
                            <Image source={require('../images/facebook-logo.png')} style={styles.facebook}></Image>
                        </TouchableHighlight>

2 个答案:

答案 0 :(得分:3)

登录成功后,您需要使用 AccessToken 功能以及 LoginManager 来获取令牌。收到令牌后,我们可以使用此令牌使用facebook的图形API来检索已登录用户的数据。

请考虑以下代码:

import { LoginManager, AccessToken } from 'react-native-fbsdk'; 

async _fbAuth() {
    let { isCancelled } = await LoginManager.logInWithReadPermissions(['public_profile','user_posts']);

    if ( !isCancelled ) {
        let data = await AccessToken.getCurrentAccessToken();
        let token = data.accessToken.toString();
        await afterLoginComplete(token);
    }
    else {
        console.log('Login incomplete');
    }

}

const afterLoginComplete = async (token) => {
    const response = await fetch(
        `https://graph.facebook.com/me?fields=id,name,first_name,last_name,gender,picture,cover&access_token=${token}`);
    let result = await response.json();

    // use this result as per the requirement
};

您可以从here

了解如何使用脸谱图API

答案 1 :(得分:1)

import {AccessToken,LoginManager} from 'react-native-fbsdk';

  fbAuth() {
    var current =  this;
    const { navigate } = this.props.navigation;
      LoginManager.setLoginBehavior('web');
        LoginManager.logInWithReadPermissions(['public_profile','email']).then(
      function (result) {
        if (result.isCancelled) {
          console.log('Login was cancelled');
        } 


         else {
          //var accessToken  = null;

          AccessToken.getCurrentAccessToken().then(
            (data) => {
              console.log(data.accessToken.toString())
             const{accessToken}   = data

  // with the help of access token you can get details for fb login

            console.log('accessToken: ' + accessToken);
             fetch('https://graph.facebook.com/v2.5/me?fields=email,name,friends&access_token=' +accessToken)
             .then((response) => response.json())
             .then((json) => {
               console.log('jsonn: ' + json);
               console.log('Login name: ' + json.name);
               console.log('Login id: ' + json.id);
               console.log('Login email: ' + json.email);
               var nsn = json.name
               console.log('Login email state: ' +nsn);   
               var idfb = json.id
               console.log('Login email state: ' +idfb);  
               var idemail = json.email
               console.log('Login email state: ' +idemail);  

             })
             .catch(() => {
               reject('ERROR GETTING DATA FROM FACEBOOK')
             })

            })

        }
      },
      function (error) {
        console.log('Login failed with error: ' + error);
      }
    );
  }