Опубликовать на facebook страницу в качестве администратора
Я использую Cordova facebook плагин для публикации на странице Facebook в качестве администратора.
У меня есть все разрешения, которые требуются для публикации на странице facebook. Ниже приведен список разрешений, которые у меня есть:
email, manage_pages, public_profile, publish_actions, publish_pages
Я пытаюсь опубликовать на странице, используя мое приложение, но каждый раз, когда он помещается с токеном пользователя, а не с токеном страницы.
Код, который я пробовал:
//Дает список управляемых пользователями страниц
$$('#apiTest_fb').on('click', function () {
facebookConnectPlugin.api( "me/accounts", ["manage_pages"],
function (response) {
console.log(JSON.stringify(response.data[0].name))
//alert(JSON.stringify(response));
//fb_pages(response);
alert("Manage Pages Permission granted");
},
function (response)
{
console.log(JSON.stringify(response))
});
});
//Динамическое раскрытие пользовательских страниц
$$('#apiTest_fb_pages').on('click', function () {
facebookConnectPlugin.api( "me/accounts", ["manage_pages"],
function (response) {
console.log(JSON.stringify(response.data[0].name))
//console.log(JSON.stringify(response));
//fb_pages(response);
var select = document.getElementById("selectPage");
for (var i = 0; i < response.data.length; i++) {
var opt = response.data[i].name;
var page_val = response.data[i].id;
var el = document.createElement("option");
el.textContent = opt;
el.value = page_val;
select.appendChild(el);
}
},
function (response)
{
console.log(JSON.stringify(response.data.name))
});
});
//при выборе pass get page access_token
$$('#selectPage').on("change", function(){
var selectPage_id = $$(this).val();
console.log(selectPage_id);
window.localStorage.setItem("selectPage_id",selectPage_id);
});
$$('#FBActionPage').on('click', function () {
facebookConnectPlugin.api( window.localStorage.getItem("selectPage_id") + "?fields=access_token", ['publish_pages', 'manage_pages'],
function (response) {
var pageToken = JSON.stringify(response.access_token);
//window.localStorage.setItem("fbtokenPage",JSON.stringify(response.access_token));
post_fbPage(pageToken);
},
function (response)
{
console.log(JSON.stringify(response))
});
});
//сообщение в личную книгу
function post_fbPage(pageToken){
console.log(pageToken);
facebookConnectPlugin.getLoginStatus( function(response) {
var url = '/'+ window.localStorage.getItem("selectPage_id") +'/feed?method=post&message=' + encodeURIComponent('Test') + '&link=' + 'impalz.co/JMR3a' + '&picture=' + 'www.impalz.com/images/affiliate-1.jpg' + '&caption=' + 'New Product' + '&description=' + 'we would love to know your feedback' +'&access_token=' + pageToken;
facebookConnectPlugin.api(
url,
['publish_pages', 'manage_pages'],
function (response) { console.log(response.id)},
function (error) { console.error(error); }
);
});
};
Вот как выглядит сообщение:
![Снимок экрана]()
Как я могу опубликовать пост в качестве администратора, используя мое приложение?
ИЗМЕНИТЬ 1:
Я попытался удалить publish_actions
и удалить и добавить приложение из пользовательских вкладок во время публикации на странице, но все же он помещается с токеном пользователя. Я отладил мой access_token и следующий контент, который я получил:
![Screen_Shot]()
ИЗМЕНИТЬ 2:
Я попытался передать свой токен facebook PHP SDK и его публикацию на моей стене отлично. Как я могу использовать PHP SDK для публикации на странице Facebook?
Я уже пробовал передавать page_token
и page_id
для публикации на странице fb с помощью PHP SDK, но он не работает.
Код, который я пытался опубликовать на странице Facebook Facebook:
require_once('src/Facebook/autoload.php');
$token = $_POST["token"]; // Used AJAX to post data on server
$fb = new Facebook\Facebook([
'app_id' => '{ID}',
'app_secret' => '{SECRET}',
'default_graph_version' => 'v2.2',
'default_access_token' => $token,
]);
$linkData = [
'link' => 'http://www.example.com',
'message' => 'User provided message',
];
try {
// Returns a `Facebook\FacebookResponse` object
$response = $fb->post('/me/feed', $linkData, $token);
} catch(Facebook\Exceptions\FacebookResponseException $e) {
echo 'Graph returned an error: ' . $e->getMessage();
exit;
} catch(Facebook\Exceptions\FacebookSDKException $e) {
echo 'Facebook SDK returned an error: ' . $e->getMessage();
exit;
}
$graphNode = $response->getGraphNode();
echo 'Posted with id: ' . $graphNode['id'];
Ответы
Ответ 1
У вас может быть никогда не истекающий токен для вашей страницы вентилятора, которая решит вашу проблему, я думаю.
Следуйте простым шагам:
- Получить расширенный токен администратора (т.е. ваш) (срок действия 2 месяца). Идти
хотя ссылка для получения
long-lived token
.
Расширение токенов
-
Получить токен доступа, который никогда не истекает, для любой страницы, используя этот токен
facebook- > API ( "/PAGE_ID поля = access_token?" );
(Вы можете использовать Facebook Debug Tool для проверки действительности токена).
Проводка в качестве администратора проста, но публикация на странице требует больше работы с вашей стороны. Для публикации на странице нам нужны следующие разрешения:
publish_stream
manage_pages
Нам нужно разрешение manage_pages
, чтобы получить токен доступа к странице, чтобы мы могли отправлять его от его имени. И так мы это делаем:
<?php
// This code is just a snippet of the example.PHP скрипт
// from the PHP-SDK <https://github.com/facebook/facebook-php-sdk/blob/master/examples/example.php>
require '../src/facebook.php';
// Create our Application instance (replace this with your appId and secret).
$facebook = new Facebook(array(
'appId' => 'app_id',
'secret' => 'app_secret',
));
// Get User ID
$user = $facebook->getUser();
if ($user) {
try {
$page_id = 'page_id';
$page_info = $facebook->api("/$page_id?fields=access_token");
if( !empty($page_info['access_token']) ) {
$args = array(
'access_token' => $page_info['access_token'],
'message' => "I'm a Page!"
);
$post_id = $facebook->api("/$page_id/feed","post",$args);
} else {
$permissions = $facebook->api("/me/permissions");
if( !array_key_exists('publish_stream', $permissions['data'][0]) ||
!array_key_exists('manage_pages', $permissions['data'][0])) {
// We don't have one of the permissions
// Alert the admin or ask for the permission!
header( "Location: " . $facebook->getLoginUrl(array("scope" => "publish_stream, manage_pages")) );
}
}
} catch (FacebookApiException $e) {
error_log($e);
$user = null;
}
}
// Login or logout url will be needed depending on current user state.
if ($user) {
$logoutUrl = $facebook->getLogoutUrl();
} else {
$loginUrl = $facebook->getLoginUrl(array('scope'=>'manage_pages,publish_stream'));
}
// ... rest of your code
?>
Использование Javascript-SDK
Достижение этого же только при использовании клиентской технологии:
function postToPage() {
var page_id = '000000000000';
FB.api('/' + page_id, {fields: 'access_token'}, function(resp) {
if(resp.access_token) {
FB.api('/' + page_id + '/feed',
'post',
{ message: "I'm a Page!", access_token: resp.access_token }
,function(response) {
console.log(response);
});
}
});
}
Использование связи /me/accounts
Если вы создаете какую-то CMS, где администратор хочет выбрать одну из страниц для обновления своего статуса, то с помощью кнопки /me/accounts лучше вы можете перечислить страницы и сохранить их access_token в одном вызове API.
$page_id = "XXXXXXXXX";
$page_access_token = "";
$result = $facebook->api("/me/accounts");
foreach($result["data"] as $page) {
if($page["id"] == $page_id) {
$page_access_token = $page["access_token"];
break;
}
}
if( !empty($page_access_token) ) {
$args = array(
'access_token' => $page_access_token,
'message' => "I'm a Page!"
);
$post_id = $facebook->api("/$page_id/feed","post",$args);
// sucess...
} else {
// couldn't find the page!
}
Всегда общайтесь со своими фанатами на странице, а страница не как администратор, поклонники знают (и доверяют) вашу страницу (продукт), но не обязательно вас!