无法在本机中从fbsdk获取电子邮件ID

Spo*_*ort 2 email android facebook ios react-native

我正在获得登录成功和accessToken。我做了

我试过了

LoginManager.logInWithReadPermissions([
      'email',
      'public_profile',
      'user_likes',
    ])
Run Code Online (Sandbox Code Playgroud)

然后这个

LoginManager.logInWithPublishPermissions([
  'publish_actions',
]).then((result) => {
  if (result.isCancelled) {
    console.log('Login cancelled');
  } else {
    AccessToken.getCurrentAccessToken().then((data) => {
      const accessToken = data.accessToken;
      const responseInfoCallback = (error, result) => {
        if (error) {
          console.log(error);
          console.log('Error fetching data=', error.toString());
        } else {
          console.log('Success fetching data=', result.toString());
        }
      };
      const infoRequest = new GraphRequest(
        '/me',
        {
          accessToken,
          parameters: {
            fields: {
              string: 'email,name,first_name,middle_name,last_name',
            },
          },
        },
        responseInfoCallback,
      );
      new GraphRequestManager().addRequest(infoRequest).start();
    });
  }
});
Run Code Online (Sandbox Code Playgroud)

“具有权限的登录成功”,“电子邮件,public_profile”和用户配置文件数据为

{ first_name: 'XXXXXX',
  name: 'XXXXXX YYYYY',
  last_name: 'YYYYYY',
  id: '1319989423636921696328130092' }
Run Code Online (Sandbox Code Playgroud)

但是没有获取用户的电子邮件ID,这是什么问题。在应用程序中登录Facebook后如何获取电子邮件ID。

Par*_*tts 5

这就是我在项目中执行此操作并成功检索电子邮件的方式

LoginManager.logInWithReadPermissions(['public_profile', 'email', 'user_friends']).then(
            (result) => {
                if (result.isCancelled) {
                    console.log('Login cancelled')
                } else {
                    AccessToken.getCurrentAccessToken().then(
                        (data) => {
                            this._fbHome();// Navigatin to next screen
                        }
                    )
                }
            },
            (error) => {
                console.log('Login fail with error: ' + error)
            }
        )
Run Code Online (Sandbox Code Playgroud)

然后导航到下一个屏幕后,我正在提取用户数据

const infoRequest = new GraphRequest(
        '/me?fields=name,email,picture.type(large)',
        null,
        this._responseInfoCallback
      );
      new GraphRequestManager().addRequest(infoRequest).start();


_responseInfoCallback = (error, result) => {
    if (error) {
      alert('Error fetching data: ' + error.toString());
    } else {
      this.setState({ userName: result.name, userEmail: result.email ,userPic:result.picture.data.url});
              AsyncStorage.setItem("UserName",this.state.userName);
                    AsyncStorage.setItem("Email", this.state.userEmail);
                    AsyncStorage.setItem("UserPic", this.state.userPic);

      //  SharedPreferences.setItem("UserName", this.state.userName);
      //       SharedPreferences.setItem("Email", this.state.userEmail);
      //       SharedPreferences.setItem("UserPic", this.state.userPic);
      console.log("Picture"+ this.state.userPic + "Name" + this.state.userName + "Email" + this.state.userEmail);
    }
  }
Run Code Online (Sandbox Code Playgroud)