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

Posted

技术标签:

【中文标题】react-native-fbsdk 发布消息 facebook Graph API FBGraphRequest【英文标题】:react-native-fbsdk post message facebook Graph API FBGraphRequest 【发布时间】:2016-08-03 17:05:31 【问题描述】:

我浏览了FBSDK Sharing documentation here,但我找不到一个简单的示例,可以使用 FBShareDialog 将简单的消息发布到时间线(不是链接、不是照片、不是视频)。 我知道我可以运行一个基本上可以做到这一点的网络请求:

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

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

我该怎么做?谢谢。

【问题讨论】:

【参考方案1】:

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

Facebook 官方的 react native SDK 位于这里https://developers.facebook.com/docs/react-native/

注意有三个不同的组件:

    登录 分享 图形 API。

前两个是不言自明的,网站上提供了示例。

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

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

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

    确保您的 fb 应用程序设置正确:https://developers.facebook.com/apps/ 获取具有 publish_actions 权限的用户访问令牌可用于发布新帖子。

获得这些信息后,您可以使用 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();

【讨论】:

Shivam,感谢您的回答,但正如我的问题所示 - 我不想发布带有评论的链接,而只是向用户的时间线发布消息/文本。示例:“你好世界!”就是这样。 react-native-fbsdkshare 是否有一个可能的对话框?谢谢。 编辑并提供了演练【参考方案2】:

我通过上面的代码使用 react native 0.43 发布到 facebook,但我在 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();
                );
        

【讨论】:

以上是关于react-native-fbsdk 发布消息 facebook Graph API FBGraphRequest的主要内容,如果未能解决你的问题,请参考以下文章

使用 react-native-fbsdk 注销的正确方法

让 react-native-fbsdk 与 CocoaPods 一起工作

react-native-fbsdk 不支持redirect_uri URL

react-native-fbsdk:“ld:找不到-l-lRNSDKCoreKit的库”

未找到 react-native-fbsdk FBSDKCoreKit 和 FBSDKShareKit

如何获取用于 react-native-fbsdk 模块的 Facebook SDK 版本