没有从fbsdk获取电子邮件ID in react native

时间:2017-09-05 14:36:03

标签: android ios facebook email react-native

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

我试过

LoginManager.logInWithReadPermissions([
      'email',
      'public_profile',
      'user_likes',
    ])

然后这个

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();
    });
  }
});

'登录成功与权限','电子邮件,public_profile' 和用户个人资料数据

{ first_name: 'XXXXXX',
  name: 'XXXXXX YYYYY',
  last_name: 'YYYYYY',
  id: '1319989423636921696328130092' }

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

2 个答案:

答案 0 :(得分: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)
            }
        )

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

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);
    }
  }

答案 1 :(得分:2)

<强>已更新 您在用户通过身份验证时设置权限,例如此代码

LoginManager.logInWithReadPermissions(['public_profile', 'email'])
        .then(function (result) {
            if (!result.isCancelled) {
                return AccessToken.getCurrentAccessToken().then((data) => {
                    return initUser(data).then((user) => {
                        return {
                            name: user.name,
                            email: user.email,
                            photo: 'https://graph.facebook.com/' + user.id + '/picture?type=normal'
                        }
                    })
                })
            }
        }).then((data) => {
            this._navigateTo(this.props, data, 'Home')
        })

在您的代码可以看到的权限中设置电子邮件

LoginManager.logInWithPublishPermissions(['public_profile', 'email']).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();
    });
  }
});