注意:所有用户小写“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,
)
我们graphPath = "/me/feed"
从 Graph API 文档中知道。回调将只是一个在请求返回时调用的函数。这给我们留下了配置对象,它在源代码中定义为:
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();