2015-08-28 15 views
12

Sto usando il plug-in Cordova facebook per postare sulla pagina di Facebook come amministratore.Post su Facebook come Admin

Ho tutte le autorizzazioni necessarie per pubblicare sulla pagina di Facebook. Di seguito è riportato l'elenco dei permessi sto avendo:

email, manage_pages, public_profile, publish_actions, publish_pages

Sto cercando di inviare a pagina usando il mio app, ma ogni volta che inserisco con token dell'utente e non con la pagina token.

Codice ho provato:

// dà elenco di utenti pagine gestire

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

// discesa dinamica di pagine utente

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

// su alcuni passaggio ottenere pagina 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)) 
        }); 

      }); 

// inviare a faccia libro

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); } 
         ); 
        }); 
      }; 

Questo è il modo sguardo post come:

Screenshot

Come posso condividere incarico di amministratore usando la mia app?

EDIT 1:

Ho provato a rimuovere publish_actions e la rimozione e l'aggiunta di app dalla schede utente durante la pubblicazione a pagina, ancora inviare con token dell'utente. Ho il debug il mio access_token e seguente contenuto ho ottenuto:

Screen_Shot

EDIT 2:

ho provato Passando il mio token facebook PHP SDK e la sua pubblicazione sul mio muro perfettamente. Come posso usare PHP SDK per postare sulla pagina di Facebook?

Ho già provato a passare page_token e page_id per postare su pagina fb utilizzando PHP SDK ma non funziona.

Codice ho provato a postare su Facebook User parete:

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

perché non rimuovere solo publish_actions? Non sei sicuro del motivo per cui stai provando ad aggiungerlo, hai solo bisogno di pubblicare pagine per postare come pagina. renderebbe il debug più facile. – luschn

+0

Ho provato a rimuovere 'publish_actions'. Ma continua a postare usando 'user_token' anche se passo' page_token' durante la pubblicazione. –

+0

rimuovi l'app nelle impostazioni di Facebook e riprova. Sono sicuro che publish_actions è ancora approvato. e sono sicuro che stai usando un token utente, immagino che sdk aggiunga semplicemente il token utente e ignori il tuo parametro token. – luschn

risposta

2

Si può avere un gettone mai scadenza per la vostra fan page, che risolverà il vostro problema credo.

a seguire le fasi:

  • Get Token esteso del admin (2 mesi di validità) (cioè il vostro di.). Vai anche se il link per ottenere il long-lived token.

Extending tokens

  • Prendi il token di accesso non in scadenza per qualsiasi pagina utilizzando questo token

    facebook-> api ("campi/page_id = access_token?");

(È possibile utilizzare Facebook's Debug Tool per verificare la validità del token).

Pubblicare come amministratore è facile ma pubblicare come Pagina richiede più lavoro da parte tua. Per pubblicare come pagina abbiamo bisogno delle seguenti autorizzazioni:

publish_stream 
manage_pages 

abbiamo bisogno del manage_pages permesso di ottenere l'accesso alla pagina di token in modo che possiamo scrivere un commento sul suo conto. E questo è come lo facciamo:

<?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 
?> 

Usando il Javascript-SDK ottenere lo stesso con la sola tecnologia client-side:

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); 
      }); 
     } 
    }); 
} 

Utilizzando/me/account di connessione

Se stai costruendo una sorta di CMS dove l'amministratore vuole selezionare una delle pagine per aggiornarne lo stato, allora usare/me/account è meglio puoi elencare le pagine e salvare il loro access_token in una chiamata 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! 
} 

comunicare sempre con i vostri fan page come pagina non come amministratore, i fan sanno (e fiducia) la pagina (prodotto), ma non necessario, è!

+0

Ho già provato a ottenere token di pagina esteso per la pagina fan e a passarlo per postare sulla pagina di Facebook, ma comunque passa 'user_token' per postare. In questione ho allegato screenshot di extended_token che non scade mai. In PHP sto usando [facebook-php-sdk-v4] (https://github.com/facebook/facebook-php-sdk-v4) che presumo sia la versione stabile, puoi aiutarmi a passare token e post page usando questo SDK v4? –

+0

Ho provato questo codice troppo https://github.com/facebook/facebook-php-sdk-v4 Funziona bene alla mia fine. All'inizio ci sono stati dei problemi nel setup ma ho usato questo link per aiuto https://developers.facebook.com/docs/php/gettingstarted/5.0.0 Vorrei che tu seguissi questo link. La documentazione completa, le istruzioni di installazione e gli esempi sono disponibili qui. –

Problemi correlati