react-native-fbsdk发布消息facebook Graph API FBGraphRequest

时间:2016-08-03 17:05:31

标签: react-native fbsdk react-native-fbsdk

我浏览了FBSDK Sharing documentation here,但我无法找到一个简单的示例,人们可以使用FBShareDialog将简单的消息发布到时间轴(不是链接,而不是照片,而不是视频)。 我知道我可以运行一个基本上执行此操作的Web请求:

POST graph.facebook.com/me/feed?
message="My new post message!"&
access_token={your-access-token}

如图API API文档中所述,但同样 - 我想使用ShareDialog来获得一致的UI。

我该怎么办?谢谢。

2 个答案:

答案 0 :(得分:2)

我发布到facebook并通过上面的代码反应原生0.43,但我改变了postRequestParams

const postRequestParams = {
  message: {
         string: 'Hello World!'
      }
}

以下是我的全部。

const FBSDK = require('react-native-fbsdk');
const {
        GraphRequest,
        GraphRequestManager,
        AccessToken
} = FBSDK;
class PostScreen extends React.Component {
    postToFacebook = () => {
            AccessToken.getCurrentAccessToken().then(
                (data) => {
                    let tempAccesstoken = data.accessToken;
                    const _responseInfoCallback = (error, result) => {
                        console.log(result);
                    }

                    const postRequestParams = {
                        message: {
                            string: "Hello world!"
                        }
                    }

                    const postRequestConfig = {
                        httpMethod: "POST",
                        version: "v2.9",
                        parameters: postRequestParams,
                        accessToken: tempAccesstoken
                    }

                    console.log(postRequestConfig);

                    const infoRequest = new GraphRequest(
                        "/me/feed",
                        postRequestConfig,
                        _responseInfoCallback,
                    );
                    console.log("infoRequest");
                    console.log(infoRequest);

                    new GraphRequestManager().addRequest(infoRequest).start();
                });
        }
}

答案 1 :(得分:1)

注意:所有用户小写“帖子”指的是发布到用户墙的行为。所有大写的“POST”都是指HTTP请求方法。

Facebook官方反应原生SDK位于https://developers.facebook.com/docs/react-native/

注意有三个不同的组成部分:

  1. 登录
  2. 分享
  3. 图谱API。
  4. 前两个是自解释的,网站上提供了示例。

      

    Graph API是将数据输入和输出Facebook的主要方式   社交图。它是一个用于查询的基于HTTP的低级API   数据,发布新故事,上传照片和各种其他任务   应用可能需要这样做。

    Facebook Graph API只是一个REST API,它允许您通过HTTP方法(GET,POST,DELETE等)与fb数据进行交互。 react-native-fbsdk只是在它上面的层,这使得更容易做出这些请求。

    发布到用户时间有两个先决条件。

    1. 确保您的fb应用已正确设置:https://developers.facebook.com/apps/
    2. 获取具有publish_actions权限的用户访问令牌可用于发布新帖子。
    3. 获得这些后,您可以使用react native GRAPH API发布消息。

      但首先让我们看一下如何使用HTTP而不是RN-SDK来实现这一目的:

      https://developers.facebook.com/docs/graph-api/reference/v2.7/user/feed

      POST /v2.7/me/feed HTTP/1.1
      Host: graph.facebook.com
      message=This+is+a+test+message
      

      根据这一点,我们需要向位置 /v2.7/me/feed 发出POST请求,并将消息定义为参数。

      最后回答您的问题如何使用react native sdk()发布到用户时间轴。让我们看一下rnsdk文档:https://developers.facebook.com/docs/react-native/graph-api

      好像我们需要两个对象GraphRequest(创建请求)和GraphRequestManager(发送请求)

      const FBSDK = require('react-native-fbsdk');
      const {
        FBGraphRequest,
        FBGraphRequestManager,
      } = FBSDK;
      

      由于没有提供如何使用这两个对象发布到用户墙的示例,我们需要查看源代码:

      https://github.com/facebook/react-native-fbsdk/blob/master/js/FBGraphRequest.js

      我们可以从构造函数中看到它有三个参数:

        /**
         * Constructs a new Graph API request.
         */
        constructor(
          graphPath: string,
          config: ?GraphRequestConfig,
          callback: ?GraphRequestCallback,
        ) 
      

      我们知道Graph API文档中的graphPath = "/me/feed"。回调只是返回请求时调用的函数。这给我们留下了配置对象,它在源中定义为:

      type GraphRequestConfig = {
        /**
         * The httpMethod to use for the request, for example "GET" or "POST".
         */
        httpMethod?: string,
        /**
         * The Graph API version to use (e.g., "v2.0")
         */
        version?: string,
        /**
         * The request parameters.
         */
        parameters?: GraphRequestParameters,
        /**
         * The access token used by the request.
         */
        accessToken?: string
      };
      

      所以我们的配置对象看起来像这样:

      const postRequestParams = {
                  fields: {
                      message: 'Hello World!'
                  }
      }
      
      const postRequestConfig = {
                  httpMethod: 'POST',
                  version: 'v2.7',
                  parameters: postRequestParams,
                  accessToken: token.toString() //pre-obtained access token
      }
      

      完全放弃:

      const FBSDK = require('react-native-fbsdk');
      const {
        FBGraphRequest,
        FBGraphRequestManager,
      } = FBSDK;
      
      _responseInfoCallback(error: ?Object, result: ?Object) {
        if (error) {
          alert('Error fetching data: ' + error.toString());
        } else {
          alert('Success fetching data: ' + result.toString());
        }
      }
      
      const postRequestParams = {
        fields: {
               message: 'Hello World!'
            }
      }
      
      const postRequestConfig = {
        httpMethod: 'POST',
        version: 'v2.7',
        parameters: postRequestParams,
        accessToken: token.toString()
      }
      
      const infoRequest = new GraphRequest(
        '/me/feed',
        postRequestConfig,
        this._responseInfoCallback,
      );
      
      new FBGraphRequestManager().addRequest(infoRequest).start();