如何在无需用户批准的情况下将照片发布到 Facebook


How do I post a photo to Facebook without the user needing to approve it?

>我正在尝试制作一个页面,我的手机应用程序可以点击该页面以将图像发布到Facebook。看起来我的图像只是消失在虚空中,但我终于弄清楚发生了什么(谢谢 phwd!

图像

正在正确上传,问题是图像在出现在相册中之前必须经过批准。这还不错,除了如果相册不包含任何批准的图像,当您单击"照片"时,它不会显示在您的相册列表中(感谢您的第 22 条军规,FB!这意味着除了获得指向图像或相册的直接链接外,无法访问图像以批准它们。

据说可以发布图像并立即显示它们,如果您具有正确的权限,则不需要用户批准,如此处的答案中所述。

该应用程序已启用沙盒模式,我正在使用具有以下权限的测试用户:read_streamuser_photosmanage_pagesphoto_uploadpublish_stream

我的理解是,publish_stream权限允许我为照片创建一个新相册(如果它尚不存在),但仅使用该权限上传的图像必须得到用户的批准。user_photos权限显然应该让我绕过用户批准,但由于某种原因,这似乎没有发生。有人有什么建议吗?

法典:

<?php
// facebook variables
require_once("fbsdk/facebook.php");
$fbconfig = array();
$fbconfig['appId'] = '...';
$fbconfig['secret'] = '...';
$fbconfig['fileUpload'] = true;
// set up FB connection
$facebook = new Facebook($fbconfig);
$facebook->setAccessToken($_POST['access']);
// some database stuff
$image = 'image name goes here';
// verify access token
$user = $facebook->getUser();
if (!$user)
    die(json_encode(array('result' => '0',
        'message' => 'Invalid FB access token.')));
// see if target album exists
try {
    $album = $facebook->api(array(
        'query' => "SELECT object_id FROM album WHERE owner=me()' 
            . ' AND name='The App With No Name' AND can_upload=1",
        'method' => "fql.query"));
    // if it exists, grab its ID
    if (isset($album[0]['object_id']))
        $album_id = $album[0]['object_id'];
    else {
        // otherwise, create it
        $create_album = $facebook->api('/me/albums', 'post', array(
            'message' => 'My photos from The App With No Name',
            'name' => 'The App With No Name'));
        $album_id = $create_album['id'];
    }
} catch (FacebookApiException $e) {
    error_log($e->getType());
    error_log($e->getMessage());
    die(json_encode(array('result' => '0',
        'message' => 'FB call (query/create albums) failed: '
            . $e->getType() . ' | ' . $e->getMessage())));
}
// try to post the photo
try {
    $fbresult = $facebook->api('/' . $album_id . '/photos', 'POST',
        array('source' => '@' . realpath('../images/' . $image . '.jpg'),
            'message' => 'Shared from The App With No Name'));
} catch (FacebookApiException $e) {
    error_log($e->getType());
    error_log($e->getMessage());
    die(json_encode(array('result' => '0',
        'message' => 'FB call (post image) failed: '
            . $e->getType() . ' | ' . $e->getMessage())));
}
// more database stuff
// report success
echo json_encode(array('result' => '1', 'message' => ''));
?>

关闭沙盒模式显然可以解决此问题,尽管我不知道为什么。我的印象是沙盒模式只是阻止您与普通用户互动?

会接受任何正确解释这一点的答案,只是把这个放上去,以便人们看到我找到的解决方案。