2016-08-03 2 views
0

Я прошел через FBSDK Sharing documentation here, но я не могу найти простой пример, где можно просто отправить простое сообщение на шкалу времени (а не ссылку, а не фотографию, а не видео) с использованием FBShareDialog. Я знаю, что могу сделать это работает веб-запрос, который по существу делает это:reply-native-fbsdk сообщение сообщение facebook График API FBGraphRequest

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

, как описано в API Docs Graph, но опять же - я хочу использовать ShareDialog иметь последовательный интерфейс.

Как это сделать? Спасибо.

ответ

1

Примечание: «нижний регистр» нижнего регистра пользователя относится к акту публикации на стене пользователя. Весь верхний регистр «POST» относится к методу HTTP-запроса.

Facebooks Offical реагирующие родной SDK находится здесь https://developers.facebook.com/docs/react-native/

Примечание Есть три различных компонента:

  1. Войти
  2. Обмен
  3. Graph API.

Первые два являются пояснительными, а примеры представлены на сайте.

Графический API - это основной способ получить данные в и из социального профиля Facebook . Это низкоуровневый HTTP-интерфейс, который используется для запроса данных , публикации новых историй, загрузки фотографий и множества других задач , которые могут потребоваться для приложения.

Facebook Graph API - это только API REST, который позволяет вам взаимодействовать с данными fb с помощью HTTP-методов (GET, POST, DELETE и т. Д.). react-native-fbsdk - только слой поверх него, что облегчает выполнение этого запроса.

Есть два предпосылки для публикации в пользовательское время.

  1. Обеспечение вашего Fb приложения правильно настроено: https://developers.facebook.com/apps/
  2. Получение маркеров доступа пользователя с разрешением publish_actions может быть использована для публикации новых сообщений.

После того, как вы их получите, вы сможете опубликовать сообщение, используя отредактированный API-интерфейс GRAPH.

Но первые давайте посмотрим на то, как вы могли бы сделать это просто используя HTTP, а затем РН-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 

В соответствии с этим мы должны сделать запрос POST к местоположение /v2.7/me/feed с сообщением, определяемым как параметр.

Чтобы ответить на ваш вопрос, как нам отправить сообщение пользователям, используйте реакцию на родной 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" из документации по графическому 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(); 
+0

Шивам, спасибо за ответ, но, как указано в моем вопросе - я не хочу, чтобы отправить ссылку с комментарием, а просто сообщение/текст на временной шкалу пользователя. Пример: «Привет, мир!» вот и все. Есть ли диалог-native-fbsdkshare, где это возможно? Спасибо. –

+0

Отредактировано и предоставлено пошаговое руководство –

1

Я отправил в 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(); 
       }); 
     } 
} 
Смежные вопросы