2015-01-25 8 views
0

я есть ошибка с изображения Загрузка с Facebook в моем Titanium программного обеспечения, каждый раз, когда я хочу, чтобы загрузить изображение из моего приложения я получаю это:Appcelerator Titanium: Facebook Image Загрузить неудачу

Сбой: REST API является рекомендуется для версий v2.1 и выше

Но если я попробовать тот же код в примере приложения KitchenSink, он отлично работает:

var xhr = Titanium.Network.createHTTPClient({ 
     onload: function() { 
    // first, grab a "handle" to the file where you'll store the downloaded data 
      var f = Ti.Filesystem.getFile(Ti.Filesystem.applicationDataDirectory,'mygraphic.png'); 
      f.write(this.responseData); // write to the file 
      var blob = f.read(); 
      var data = { 
       caption: 'behold, a flower', 
       picture: blob 
      }; 
      facebook.request('photos.upload', data, showRequestResult); 
     }, 
     timeout: 10000 
    }); 
    xhr.open('GET','http://www.pur-milch.de/files/www/motive/pm_motiv_kaese.jpg'); 
    xhr.send(); 

и в моем приложении:

function showRequestResult(e) { 
    var s = ''; 
    if (e.success) { 
     s = "SUCCESS"; 
     if (e.result) { 
      s += "; " + e.result; 
     } 
    } else { 
     s = "FAIL"; 
     if (e.error) { 
      s += "; " + e.error; 
     } 
    } 
    alert(s); 
} 
Ti.App.hs_stats.addEventListener('touchend', function(e){ 
Ti.App.hs_stats.top = 255; 
var xhr = Titanium.Network.createHTTPClient({ 
     onload: function() { 
    // first, grab a "handle" to the file where you'll store the downloaded data 
      var f = Ti.Filesystem.getFile(Ti.Filesystem.applicationDataDirectory,'mygraphic.png'); 
      f.write(this.responseData); // write to the file 
      var blob = f.read(); 
      var data = { 
       caption: 'behold, a flower', 
       picture: blob 
      }; 
      Ti.App.fb.request('photos.upload', data, showRequestResult); 
     }, 
     timeout: 10000 
    }); 
    xhr.open('GET','http://www.pur-milch.de/files/www/motive/pm_motiv_kaese.jpg'); 
    xhr.send();  
}); 

ответ

2

Похоже, вы используете «старый» модуль Facebook для Appcelerator? У меня есть загрузка изображений для профилей и страниц (хотя страницы немного разные, я объясню позже). Вот некоторый быстрый код (я предполагаю, что вы уже заверен Facebook):

var fb = require('facebook'); 
fb.appid = "xxxxxxxxxxxxxxxxx"; 
var acc = fb.getAccessToken(); 

fb.requestWithGraphPath('me/photos?access_token='+ acc, {picture:image, message: data}, "POST", showRequestResult); 

Переменная изображение просто клякса - Он поставляется непосредственно из event.media из выбора галереи или намерения камеры. data - это текст для вашего обновления статуса.

В вашем tiapp.xml добавить эти строки:

<property name="ti.facebook.appid">xxxxxxxxxxxxxxxxx</property> 

и (если вы используете Android и IOS - добавить оба или только платформу вы используете)

<modules> 
    <module platform="android">facebook</module> 
    <module platform="iphone">facebook</module> 
</modules> 

сейчас Страницы были немного странно:

var endPoint = 'https://graph.facebook.com/v2.1/' + pid + '/photos?access_token='+ acc; 
              xhr.open('POST',endPoint); 
              xhr.send({ 
               message: data, 
               picture: image 
              }); 

Вы должны использовать HTTP-запрос, так как я не мог получить requestWithGraphPath() для работы со страницами независимо от того, что я пробовал.

ПИД- ваш идентификатор страницы, и вы можете получить его, или список страниц, вы админ, как за это (опять же, создать новый запрос HTTP (XHR) и использовать это):

xhr.open("GET","https://graph.facebook.com/v2.1/me?fields=accounts{access_token,global_brand_page_name,id,picture}&access_token=" +fb.getAccessToken()); 

Это вернет токен доступа для каждой страницы, глобального фирменного наименования (в основном чистую версию названия страницы), это идентификатор и изображение профиля. Маркер доступа в этом URL-адресе - ваш токен доступа (& access_token = часть).

Насколько я могу судить, эти токены доступа не заканчиваются на страницах, поэтому вы можете сохранить их в своем приложении где-нибудь или если вы ДЕЙСТВИТЕЛЬНО хотите быть в безопасности, вы можете захватить токен перед каждым сообщением, но это многовато.

БОНУС:

Если вы хотите сделать видео сообщения на страницах:

var xhr = Titanium.Network.createHTTPClient(); 
    var endPoint = 'https://graph-video.facebook.com/'+ pid +'/videos?access_token='+ acc; 
xhr.open('POST',endPoint); 

xhr.setRequestHeader("enctype", "multipart/form-data"); 

xhr.send({source:video, description:data}); 

и профилей:

  var acc = fb.getAccessToken(); 
    var xhr = Titanium.Network.createHTTPClient(); 
    var endPoint = 'https://graph-video.facebook.com/me/videos?access_token='+ acc; 
xhr.open('POST',endPoint); 

xhr.setRequestHeader("enctype", "multipart/form-data"); 

xhr.send({source:video, description:data}); 

видео еще одна капля либо из камеры или галереи события. медиа-намерение и данные - это текст, который вы хотите использовать для обновления статуса.

+1

GREAT! Я получаю свою неудачу за несколько минут до того, как вы разместите свой ответ.Но ваш ответ больше, чем я искал. но я думаю, что снова проверю ваш ответ, если у меня есть какие-то действия, как вы описали его. СПАСИБО! – Booster4App

+0

Дайте мне знать, как это получится - если вам нужно что-нибудь увидеть, дайте мне знать! –

+1

все идет отлично, спасибо. сохранен мой день;) – Booster4App

Смежные вопросы