看起来您正在为 Appcelerator 使用“旧”Facebook 模块?我有适用于个人资料和页面的图像上传(尽管页面有点不同,我稍后会解释)。这是一些快速代码(我假设您已经通过 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);
image 变量只是一个 blob - 它直接来自来自画廊选择或相机意图的 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>
现在 Pages 有点奇怪:
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() 来处理页面。
pid 是您的页面 ID,您可以获取它,或者是您作为管理员的页面列表,如下所示(同样,创建一个新的 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());
这将返回每个页面的访问令牌、全局品牌名称(基本上是页面名称的干净版本)、它的 ID 和个人资料图片。此 URL 中的访问令牌是您的个人访问令牌(&access_token= 部分)。
据我所知,这些访问令牌不会在页面上过期,因此您可以将其保存在应用程序中的某个位置,或者如果您真的想要安全,您可以在每次发布之前获取一个令牌,但这有点多了。
BONUS:
如果您想在页面上发布视频:
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});
视频是来自相机或图库事件的另一个 blob。媒体意图和数据是您要用于状态更新的文本。