2014-05-21 2 views
7

Sto utilizzando FB.ui per condividere una pagina su Facebook e sto cercando di impostare il titolo e il messaggio (immagine se possibile ma non importante). Ho questo nel mio sito intestazioneLa condivisione FB.ui imposta il titolo, il messaggio e l'immagine

<meta property="og:title" content="Your title here" /> 
<meta property="og:description" content="your description here" /> 

E il mio codice JavaScript viene

FB.ui({ 
     method: 'share', 
     href: document.URL, 
    }, function(response){ 

     //TODO Proper response handling 
     log(response); 
     if (typeof response != 'undefined') { 
      alert('Thanks for sharing'); 
     } 
    }); 

Da quello che ho letto ho solo bisogno di og: titleand og: Descrizione per impostare il titolo e il messaggio, ma quello non sembra funzionare.

Corrente il titolo proviene da una parte del titolo della parte o un tag alt su un'immagine e il messaggio viene popolato da un semplice tag di paragrafo.

risposta

33

Tom, ho avuto lo stesso problema e alla ricerca di una soluzione che ho trovato il tuo post. Forse l'hai risolto ma volevo condividere ciò che ho trovato nel caso in cui potesse essere utile per altre persone. I documenti di Facebook dicono che il metodo "share" ha solo parametro href, ma ho scoperto che non è vero. Puoi usare parametri molto simili al metodo "feed". Questo è quello che ho usato e funziona:

FB.ui(
    { 
     method: 'share', 
     href: 'your_url',  // The same than link in feed method 
     title: 'your_title', // The same than name in feed method 
     picture: 'path_to_your_picture', 
     caption: 'your_caption', 
     description: 'your_description', 
    }, 
    function(response){ 
     // your code to manage the response 
    }); 
+0

Questo dovrebbe essere scritto nel documento. Grazie. – ucheng

+0

Informazioni fantastiche. Grazie per aver condiviso questo! – suther

+0

Piacere di leggere è utile per qualcuno;) – Janbalik

1

Ho trovato questo post e ho cercato di implementare i passaggi di cui sopra. Dopo aver perso qualche ora ho visto il commento di @SMT sopra ...

Non ho più funzionato nella v2.10.

Il mio cliente era già in attesa di questa funzione, quindi ho dovuto trovare una soluzione alternativa. Nota: ho scritto questa soluzione per WordPress, quindi è possibile modificare alcune righe per farlo funzionare sul tuo sito.

Cominciamo con il mio codice HTML un involucro contenente l'immagine e il pulsante:

<div class="my-image-container"> 
    <img src="http://example.com/image.jpg"> 
    <a href="#" class="fb-share-image">Share</a>'); 
</div> 

Nel mio codice JS aggiungo l'URL dell'immagine come parametro per l'URL che voglio condividere :

window.fbAsyncInit = function() { 
    FB.init({ 
     appId   : 'YOUR APP ID', 
     status   : true, 
     cookie   : true, 
     version   : 'v2.10'     
    }); 

    $('.fb-share-image').click(function(e){ 
     e.preventDefault(); 
     var image = $(this).siblings('img').attr('src'); 

     FB.ui(
       { 
        method: 'share', 
        href: $(location).attr('href') + '?og_img=' + image, 
       }, 
       function (response) { 

       } 
      ); 
    }) 
}; 

(function(d, s, id){ 
    var js, fjs = d.getElementsByTagName(s)[0]; 
    if (d.getElementById(id)) {return;} 
    js = d.createElement(s); js.id = id; 
    js.src = "//connect.facebook.net/en_US/sdk.js"; 
    fjs.parentNode.insertBefore(js, fjs); 
}(document, 'script', 'facebook-jssdk')); 

Il passaggio successivo consiste nel gestire il parametro URL. Questo codice è per WordPress e WordPress SEO di YOAST ma puoi semplicemente cambiarlo per lavorare con il tuo CMS. Aggiungi questo al vostro functions.php:

add_filter('wpseo_opengraph_image',function($img){ 
    if(array_key_exists('og_img', $_GET)) 
     return $_GET['og_img']; 
    return $img; 
}); 

add_filter('wpseo_opengraph_url',function($url){ 
    if(array_key_exists('og_img', $_GET)) 
     return $url . '?og_img=' . $_GET['og_img']; 
    return $url; 
}); 

L'idea generale è quella di creare un URL individuale per ogni immagine che cambia solo i parametri OG così Facebook deve raschiare ciascuno di essi singolarmente. Per evitare problemi di SEO dovresti avere un tag canonico nell'intestazione che punta all'URL originale. Ecco lo complete article.

+0

Sembra che la soluzione alternativa che stavo cercando poiché il parametro dell'immagine personalizzata ha perso la sua funzionalità. Ma quando faccio tutto come descritto facendo clic sul mio pulsante di condivisione si apre una finestra di messaggio con "ID applicazione non valido: 0". È che ho completamente frainteso qual è questa soluzione? Ho provato a implementarlo su una normale pagina generata da Wordpress. Non hai idea di cosa sia un'app Facebook ecc. – Garavani

+1

Devi creare la tua app Facebook e inserire l'ID APP sulla riga 3. Bastano pochi minuti: https://developers.facebook.com/docs/apps/register/ – Hannes

+0

Grazie! Fatto tutto ciò e adattato i tuoi script. È comunque possibile ottenere solo i contenuti della finestra di condivisione standard (come nel sito og). Sei sicuro che le singole immagini possano essere raggiunte per diversi pulsanti di condivisione sulla stessa pagina? – Garavani

11

Il codice che si sta utilizzando è obsoleto. È possibile utilizzare il seguente dialogo quota con gli attributi sovrascritti in modo dinamico:

FB.ui({ 
    method: 'share_open_graph', 
    action_type: 'og.shares', 
    display: 'popup', 
    action_properties: JSON.stringify({ 
    object: { 
     'og:url': override_url, 
     'og:title': override_title, 
     'og:description': override_description, 
     'og:image': override_image_url' 
    } 
    }) 
}, function(response) { 
    // Action after response 
}); 

Per un esempio di lavoro dettagliato, checkout: http://drib.tech/programming/dynamically-change-facebook-open-graph-meta-data-javascript.

Se si condivide una pagina Web (con og meta tag) su Facebook e si aggiorna il titolo e la descrizione ecc. In seguito, non verranno aggiornati istantaneamente su Facebook poiché memorizza nella cache la pagina Web e ritira la pagina dopo 2 giorni .

Quindi, se si desidera aggiornare istantaneamente il titolo, la descrizione, ecc. Su Facebook, sarà necessario ritagliare nuovamente la pagina Web utilizzando lo strumento Facebook debug.

5

Questo funziona per me dal 2018-01-01, utilizzando il metodo share-open-graph. Funziona, ma sembra essere magico e non documentato, quindi caveat coder.

shareOnFB: function() { 
    var img = "image.jpg"; 
    var desc = "your caption here"; 
    var title = 'your title here'; 
    var link = 'https://your.link.here/'; 

    // Open FB share popup 
    FB.ui({ 
     method: 'share_open_graph', 
     action_type: 'og.shares', 
     action_properties: JSON.stringify({ 
      object: { 
       'og:url': link, 
       'og:title': title, 
       'og:description': desc, 
       'og:image': img 
      } 
     }) 
    }, 
    function (response) { 
     // Action after response 
    }); 
+1

Questo funziona perfettamente per me. Grazie mille per aver salvato la mia giornata! :) –

0

Se avete secchio pubblico e ancora non si riesce a condividere la vostra immagine con facebook quindi controllare il vostro backend s3 codice di caricamento delle immagini secchio.

var data = { 
    Bucket: bucketName, 
    Key: fileName, 
    Body: buf, 
    ContentEncoding: 'base64', 
    ContentType: 'image/jpeg', 

}; 
s3Bucket.putObject(data, function(err, data){ 
    if (err) { 
     console.log(err); 
     console.log('Error uploading data: ', data); 
     callback(err); 
    } else { 
     console.log('succesfully uploaded the image!'); 
     callback(null,""); 
    } 
}); 

Rimuovere ContentType: 'image/jpeg', dai dati Oggetto.