携帯電話アプリでFacebookに画像を投稿できるページを作成しようとしています。私の画像はちょうど空虚に消えていったように見えましたが、私はついに何が起こっているのかを理解しました(phwdに感謝します!)
画像は適切にアップロードされています。問題は、画像がアルバムに表示される前に画像を承認する必要があることです。これはそれほど悪くはありませんが、アルバムに承認された画像が含まれていない場合、[写真]をクリックしてもアルバムリストに表示されません(catch-22、FBに感謝します)。これは、画像またはアルバムへの直接リンクが与えられる以外に、画像を承認する方法がないことを意味します。
ここでの回答で説明されているように、適切な権限があれば、ユーザーによる承認を必要とせずに、画像を投稿してすぐに表示させることができると思われます。
アプリでサンドボックスモードが有効になっており、次の権限を持つテストユーザーを使用していますread_stream
:、、、、、、。user_photos
manage_pages
photo_upload
publish_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' => ''));
?>