为什么使用Facebook的Graph API(通过AJAX POST)上传的图片获得“仅限我”权限?

时间:2013-11-19 22:33:10

标签: javascript ajax html5 facebook-graph-api facebook-javascript-sdk

我正在使用HTML5 Canvas生成图片,并使用/me/photos端点将其发布到用户的时间轴,如下所示:

var canvas = self.canvas[0],
    // get a data url of the canvas contents, like data:image/png;base64,abcdefghijk
    dataUrl = canvas.toDataURL('image/png'),
    // get the base64 data without the url portion, like abcdefghijk
    data = dataUrl.substring(dataUrl.indexOf(',') + 1),
    // get the raw binary data
    rawData = atob(data);

// create an array buffer of the raw data
var buffer = new Uint8Array(rawData.length);
for (var i = 0; i < rawData.length; ++i)
{
    buffer[i] = rawData.charCodeAt(i);
}

// create a blob out of the array buffer, which we're going to send in the form data
var blob = new Blob([ buffer ], { type: 'image/png' })

// create the form data that we're going to send
var formData = new FormData();

//formData.append('access_token', response.authResponse.accessToken);
formData.append('source', blob);
formData.append('message', 'Test message');
formData.append('privacy', '{"value": "ALL_FRIENDS"}');

// send via ajax
$.ajax({
    url: 'https://graph.facebook.com/me/photos?access_token=' + response.authResponse.accessToken,
    type: 'POST',
    data: formData,
    processData: false,
    contentType: false,
    cache: false
}).done(function(data, textStatus, jqXHR) {
    console.log('posted image', data, textStatus);
}).fail(function(jqXHR, textStatus, errorThrown) {
    console.log('failed to post image', textStatus, errorThrown);
});

这有点起作用。图片将上传到为应用程序创建的相册中。但是,图片设置为“仅限我”权限,需要获得批准:

Picture Approval

如何控制此权限并将图片直接发布到用户的时间线?意思是,图片需要获得“朋友”许可,用户不必批准相册中的图片。

我已尝试将privacy参数设置为ALL_FRIENDS(请参阅上面的代码),但这似乎没有任何效果。此外,当我通过登录对话框授权应用程序时,系统不会提示我提供任何类型的权限选项。

那么“只有我”来自哪里?

2 个答案:

答案 0 :(得分:0)

您无法发布超出用户设置权限的任何内容。因此,对于设置为“必须获得批准”的照片,您必须拥有自己的帐户权限。请查看https://www.facebook.com/help/www/385017548218624,了解如何更改权限。

答案 1 :(得分:0)

您确定自己的应用未处于沙盒模式吗?当您授权时,您应用的一般隐私设置是什么?如果您首次在“仅我”模式下授权,则每个帖子的隐私设置都不会产生任何影响