如何通过react-native-fbsdk使用图形API?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (130)

我在githubFacebook开发人员文档上阅读了这个文档。 只有样品,没有更多。没有API文档。

制作Graph API请求的代码是

const infoRequest = new GraphRequest(
  '/me',
  null,
  this._responseInfoCallback,
);

和回调

_responseInfoCallback(error: ?Object, result: ?Object) {
  if (error) {
    alert('Error fetching data: ' + error.toString());
  } else {
    alert('Success fetching data: ' + result.toString());
  }
}

这里是制作Graph API请求的功能

testRequestGraphAPI(){
  const infoRequest = new GraphRequest(
  '/me',
  null,
  this._responseInfoCallback,
  );   
    new GraphRequestManager().addRequest(infoRequest).start();
}

但是,我找不到任何进一步的文件。我不知道每个参数是做什么的。

上面这些代码的结果是这样的。 我也不知道如何得到结果。

但是,当我尝试将'\ me'修改为'me?fields = id,name'时,它失败了。虽然我已经征求了许可

<LoginButton
  publishPermissions={["publish_actions,user_birthday, user_religion_politics, user_relationships, user_relationship_details, user_hometown, user_location, user_likes, user_education_history, user_work_history, user_website, user_managed_groups, user_events, user_photos, user_videos, user_friends, user_about_me, user_status, user_games_activity, user_tagged_places, user_posts, user_actions.video, user_actions.news, user_actions.books, user_actions.music, user_actions.fitness, public_profile, basic_info"]}
  onLoginFinished={
    (error, result) => {
      if (error) {
        alert("login has error: " + result.error);
      } else if (result.isCancelled) {
        alert("login is cancelled.");
      } else {
        AccessToken.getCurrentAccessToken().then(
          (data) => {
            meow_accesstoken = data.accessToken
            alert(meow_accesstoken.toString())
          }
        )
      }
    }
  }
  onLogoutFinished={() => alert("logout.")}/>  

但它不打印出什么错误,只是对象对象。

所以,问题是我不明白Facebook提供的示例代码没有解释。

这里是我的问题,我真的需要你帮助我: 首先,请检查我目前正在查看的JavaScript代码? 如何在react-native-fbsdk中使用图形API来检索一些用户信息(例如:全名)并成功显示它(使用警报)?GraphRequest()中的 每个参数是做什么的?_responseInfoCallback中错误对象和结果对象的结构是什么?

提问于
用户回答回答于

不幸的是,React-本机-fbsdk文档没有被更新,并且示例也不能很好地工作。

我遇到了同样的问题,我通过尝试和错误解决了它。

要解决你的问题,你需要改变你的图形请求加法帕拉姆像这样:

  <LoginButton
    onLoginFinished={
      (error, result) => {
        if (error) {
          alert("login has error: " + result.error);
        } else if (result.isCancelled) {
          alert("login is cancelled.");
        } else {

          AccessToken.getCurrentAccessToken().then(
            (data) => {
              let accessToken = data.accessToken
              alert(accessToken.toString())

              const responseInfoCallback = (error, result) => {
                if (error) {
                  console.log(error)
                  alert('Error fetching data: ' + error.toString());
                } else {
                  console.log(result)
                  alert('Success fetching data: ' + result.toString());
                }
              }

              const infoRequest = new GraphRequest(
                '/me',
                {
                  accessToken: accessToken,
                  parameters: {
                    fields: {
                      string: 'email,name,first_name,middle_name,last_name'
                    }
                  }
                },
                responseInfoCallback
              );

              // Start the graph request.
              new GraphRequestManager().addRequest(infoRequest).start()

            }
          )

        }
      }
    }
    onLogoutFinished={() => alert("logout.")}/>

您需要启用远程JS调试console.log()信息。https://facebook.github.io/react-native/docs/debugging.html

而且,您可能需要获得一些权限才能获得比姓名和电子邮件更多的信息,因此查看FacebookGraphAPI文档是个好主意:https://developers.facebook.com/docs/graph-api/overview/

参考资料:

https://github.com/facebook/react-native-fbsdk/issues/105#issuecomment-206501550

用户回答回答于

下面是一个自定义按钮的示例,如果想要创建一个按钮的话

FbLoginButton() {
 LoginManager
  .logInWithReadPermissions(['public_profile'])
  .then(function (result) {
    if (result.isCancelled) {
      alert('Login cancelled');
    } else {
      AccessToken
        .getCurrentAccessToken()
        .then((data) => {
          let accessToken = data.accessToken
          alert(accessToken.toString())

          const responseInfoCallback = (error, result) => {
            if (error) {
              console.log(error)
              alert('Error fetching data: ' + error.toString());
            } else {
              console.log(result)
              alert('Success fetching data: ' + result.toString());
            }
          }

          const infoRequest = new GraphRequest('/me', {
            accessToken: accessToken,
            parameters: {
              fields: {
                string: 'email,name,first_name,middle_name,last_name'
              }
            }
          }, responseInfoCallback);

          // Start the graph request.
          new GraphRequestManager()
            .addRequest(infoRequest)
            .start()

        })
    }
  }, function (error) {
    alert('Login fail with error: ' + error);
   });
  }

扫码关注云+社区

领取腾讯云代金券