2

携帯電話アプリでFacebookに画像を投稿できるページを作成しようとしています。私の画像はちょうど空虚に消えていったように見えましたが、私はついに何が起こっているのかを理解しました(phwdに感謝します!)

画像は適切にアップロードされています。問題は、画像がアルバムに表示される前に画像を承認する必要があることです。これはそれほど悪くはありませんが、アルバムに承認された画像が含まれていない場合、[写真]をクリックしてもアルバムリストに表示されません(catch-22、FBに感謝します)。これは、画像またはアルバムへの直接リンクが与えられる以外に、画像を承認する方法がないことを意味します。

ここでの回答で説明されているように、適切な権限があれば、ユーザーによる承認を必要とせずに、画像を投稿してすぐに表示させることができると思われます。

アプリでサンドボックスモードが有効になっており、次の権限を持つテストユーザーを使用していますread_stream:、、、、、、。user_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' => ''));

?>
4

1 に答える 1

3

サンドボックスモードをオフにすると、明らかにこれが修正されますが、理由はわかりません。サンドボックスモードでは、通常のユーザーとのやり取りが妨げられているという印象を受けましたか?

これを適切に説明する答えを受け入れます。私が見つけた解決策が人々にわかるように、これを立てるだけです。

于 2012-07-07T17:32:08.350 に答える