2015-08-11 1 views
2

У меня возникли проблемы с подключением приложений к приложениям с помощью Parse.Использование Facebook для мобильного хостинга API с парсером Cloud Code для ссылок на приложения

Поскольку мое приложение является мобильным, я только хотел использовать API для мобильного хостинга Facebook. И так как вам нужно отправить свой Facebook App Secret с просьбой, которую я хотел сделать с помощью кода облака разбора.

Все я coud найти в документации на Facebook было то, как сделать это с Скручивание

curl https://graph.facebook.com/app/app_link_hosts \ 
-F access_token="APP_ACCESS_TOKEN" \ 
-F name="iOS App Link Object Example" \ 
-F ios=' [ 
    { 
     "url" : "sharesample://story/1234", 
     "app_store_id" : 12345, 
     "app_name" : "ShareSample", 
    }, ]' \ 
-F web=' { 
    "should_fallback" : false, }' 

так это то, что я придумал в облаке кода

Parse.Cloud.httpRequest({ 
    method: 'POST', 
    url: 'https://graph.facebook.com/app/app_link_hosts', 
    headers: { 
    'Content-Type': 'multipart/form-data' 
    }, 
    body: { 
    access_token : "APP_ACCESS_TOKEN", 
    name : "iOS App Link Object Example", 
    ios : '[{"url" : "sharesample://story/1234","app_store_id" : 12345,"app_name" : "ShareSample",},]', 
    web : '{"should_fallback" : false,}' 
    } 

ответ я получаю : Запрос не выполнен с кодом ответа 400

Теперь я просто прочитал, что данные multipart/form не поддерживаются с помощью Parse.Cloud.httpRequest , так есть ли другой способ сделай это?

обновление: только что узнал, что вы можете отправить многокомпонентные данные с буфером, , так что это мой код в настоящее время

var Buffer = require('buffer').Buffer;  
var access_token = new Buffer('APP_ACCESS_TOKEN','utf8'); 
var name = new Buffer('iOS App Link Object Example','utf8'); 
var ios = new Buffer('[{"url" : "sharesample://story/1234","app_store_id" : 12345,"app_name" : "ShareSample",},]','utf8'); 
var web = new Buffer('{"should_fallback" : false,}','utf8'); 

var contentBuffer = Buffer.concat([access_token, name, ios, web]); 

Parse.Cloud.httpRequest({ 
    url: 'https://graph.facebook.com/app/app_link_hosts', 
    method: 'POST', 
    headers: { 
    'Content-Type': 'text/html; charset=utf-8' 
    }, 
    body: contentBuffer 
} 

однако я все еще получаю тот же результат :(

Update2: есть он работает с типом контента application/x-www-form-urlencoded и нормальным телом. Но я думаю, что ошибка была где-то в моих параметрах, так как я тестировал ее с завиванием и получил тот же ответ

ответ

1

Мне потребовалось несколько часов, но я, наконец, получил его работу :

// Returns the canonical url, like https://fb.me/.... 
Parse.Cloud.define("createAppLink", function(request, response) { 
    // see https://developers.facebook.com/docs/graph-api/reference/v2.5/app/app_link_hosts 

    var storyId = request.params.storyId + ''; // param identifying a single "post" 
    var appId = 'APP_ID'; 
    var appSec = 'APP_SECRET'; 
    var appToken = appId + '|' + appSec; // your app token 

    Parse.Cloud.httpRequest({ 
     url: 'https://graph.facebook.com/app/app_link_hosts', 
     method: 'POST', 
     headers: { 
      'Content-Type': 'application/json' 
     }, 
     body: JSON.stringify({ // you need to stringify it 
      access_token: appToken, 
      name: 'LINK TO ' + storyId, // it is needed but not public 
      android: [{ 
       url: 'app://story/' + storyId, // deep link url 
       package: 'com.package', // your package name 
       app_name: 'APP' // your app name 
      }], 
      web: { should_fallback: 'false' } 
     }) 
    }).then(function(httpResponse) { 
     // We get an id, by which we can fetch 
     // the canonical url with a get request 
     var data = JSON.parse(httpResponse.text); 
     var id = data.id; 
     return Parse.Cloud.httpRequest({ 
      url: 'https://graph.facebook.com/' + id, 
      method: 'GET', 
      headers: { 
       'Content-Type': 'application/json' 
      }, 
      params: { 
       access_token: appToken, 
       fields: 'canonical_url', 
       pretty: 'true' 
      } 
     }); 
    }).then(function(httpResponse) { 
     var data = JSON.parse(httpResponse.text); 
     var canonicalUrl = data.canonical_url; 
     response.success(canonicalUrl); 

    }, function(error) { 
     response.error(error); 
    }) 
});