2015-08-28 136 views
12

我正在使用Cordova facebook插件以管理員身份登錄Facebook頁面。以管理員身份登錄Facebook頁面

我擁有需要在Facebook頁面上發佈的所有權限。以下是我有權限的列表:

email, manage_pages, public_profile, publish_actions, publish_pages

我試圖使用後我的應用程序頁面,但每次它與用戶令牌,不與頁面令牌發佈。

代碼我想:

//,帶出的網頁的用戶的列表管理用戶的網頁

$$('#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)) 
        }); 
      }); 

//在選擇合格的

$$('#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)) 
        }); 
      }); 

//動態下拉獲得頁面的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); } 
         ); 
        }); 
      }; 

這是怎麼交的樣子:

Screenshot

如何使用我的應用我分享信息的管理?

編輯1:

我試圖消除publish_actions和刪除,並從用戶選項卡中添加應用程序,同時網頁上發佈,它仍然與發佈用戶令牌。我調試我和的access_token以下內容我:

Screen_Shot

編輯2:

我想通過我的令牌facebook PHP SDK和其張貼在牆上完美。我如何使用PHP SDK在Facebook頁面上發佈?

我已經嘗試通過page_tokenpage_id使用PHP SDK在FB頁上發佈,但它不起作用。我試圖張貼在用戶的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']; 
+0

爲什麼不只是刪除publish_actions?不確定爲什麼要添加它,您只需要publish_pages作爲頁面發佈。會使調試更容易。 – luschn

+0

我試着刪除'publish_actions'。但是,即使我在發佈時傳遞了「page_token」,它仍然會使用'user_token'。 –

+0

刪除您的Facebook設置中的應用程序,然後重試。我相信publish_actions仍然被批准。我相信你使用的是用戶令牌,我猜測sdk只是添加了用戶令牌並且忽略了你自己的令牌參數。 – luschn

回答

2

你可以有一個永遠不會過期令牌您fan page,這將解決你的問題,我猜。

按照簡單的步驟:

  • 獲取管理員的擴展標記(2個月的有效期)(即你的)。去 雖然鏈接得到long-lived token

Extending tokens

  • 使用該令牌

    facebook-> API( 「?/ PAGE_ID字段=的access_token」)獲取任何頁面從不到期訪問令牌;

(您可以使用Facebook's Debug Tool來檢查令牌的有效性)。

以管理員身份發帖很簡單,但發佈爲Page需要您從側面進行更多工作。要發佈的頁面,我們需要以下權限:

publish_stream 
manage_pages 

我們需要manage_pages權限獲取頁面訪問令牌,所以我們可以張貼在代表其。這是我們如何做到這一點:

<?php 
// This code is just a snippet of the example.php script 
// 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 /賬戶連接

如果您正在創建某種CMS管理員想要選擇其中一個頁面來更新其狀態,那麼使用/我/帳戶更好您可以列出頁面並將其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! 
} 

始終與您的網頁球迷溝通的頁面不是管理員,球迷知道(和信任),您的頁面(產品),但不是必需的你!

+0

我已經嘗試爲粉絲頁面獲取擴展頁面標記並將它傳遞到Facebook頁面上發佈,但它仍然會傳遞'user_token'來發布。在問題中,我附上了從未到期的extended_token的屏幕截圖。在PHP中,我使用[facebook-php-sdk-v4](https://github.com/facebook/facebook-php-sdk-v4),我猜是穩定版本,你能幫我傳遞頁面令牌併發布使用這個v4 SDK? –

+0

我也試過這個代碼https://github.com/facebook/facebook-php-sdk-v4它在我的最後工作得很好。起初在安裝過程中有問題,但我用這個鏈接來獲取幫助https://developers.facebook.com/docs/php/gettingstarted/5.0.0我希望你能通過這個鏈接。完整的文檔,安裝說明和示例可在此處獲得。 –