私はFB.uiを使用してFacebookとページを共有し、タイトルとメッセージ(可能な場合は重要ではないが画像)を設定しようとしています。私は自分のサイトのヘッダーにこれを持っています
<meta property="og:title" content="Your title here" />
<meta property="og:description" content="your description here" />
そして私のjavascriptコードは
FB.ui({
method: 'share',
href: document.URL,
}, function(response){
//TODO Proper response handling
log(response);
if (typeof response != 'undefined') {
alert('Thanks for sharing');
}
});
私が読んだことから、タイトルとメッセージを設定するためにog:titleとog:descriptionをする必要があるだけですが、それはうまくいかないようです。
現在のタイトルは、パーツのタイトルの一部、または画像のaltタグからのものであり、メッセージはランダムな段落タグからのみ入力されています。
メタデータはFacebookによってキャッシュされる可能性があります。 FacebookデバッガーにURLを入力してみてください: https://developers.facebook.com/tools/debug/
これにより、キャッシュがクリアされます。
画像にはこれを使用してください:
<meta property="og:image" content="http://yourimage">
トム、私は同じ問題を抱えていて、あなたの投稿を見つけた解決策を探していました。たぶんあなたはそれを解決しましたが、それが他の人々に役立つかもしれない場合に備えて、私が見つけたものを共有したいと思いました。 Facebookのドキュメントには、「共有」メソッドにはhrefパラメータしかないと書かれていますが、私はそれが真実ではないことを発見しました。 「フィード」メソッドとよく似たパラメータを使用できます。これは私が使用して動作したものです:
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
});
使用しているコードは非推奨です。次の共有ダイアログを使用して、動的にオーバーライドされた属性を使用できます。
FB.ui({
method: 'share_open_graph',
action_type: 'og.shares',
display: 'popup',
action_properties: JSON.stringify({
object: {
'og:url': 'https://your-url-here.com',
'og:title': 'Title to show',
'og:description': 'The description',
'og:image': 'https://path-to-image.png'
}
})
}, function(response) {
// Action after response
});
詳細な作業例については、チェックアウト: http://drib.tech/programming/dynamically-change-facebook-open-graph-meta-data-javascript 。
Facebookで(ogメタタグを含む)Webページを共有し、後でタイトルや説明などを更新した場合、Webページがキャッシュされ、2日後に再びスクラップされるため、Facebookですぐに更新されません。
Facebookのタイトルや説明などをすぐに更新したい場合は、 Facebook debug ツールを使用してWebページを再度スクラップする必要があります。
これは、2018-01-01現在、share-open-graph
方法。これは機能しますが、魔法のようで、文書化されていないため、コーダーに注意してください。
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
});
私はこの投稿を見つけ、上記の手順を実行しようとしました。数時間を無駄にした後、上の@SMTからのコメントを見ました...
V2.10では間違いなく動作しなくなりました。
私の顧客はすでにこの機能を待っていたので、回避策を見つける必要がありました。注:私はこのソリューションをWordPress用に作成したので、数行を変更してサイトで機能させることができます。
まず、HTMLコードの画像とボタンを含むラッパーから始めましょう。
<div class="my-image-container">
<img src="http://example.com/image.jpg">
<a href="#" class="fb-share-image">Share</a>');
</div>
私のJSコードで、共有するURLにパラメータとして画像のURLを追加します。
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'));
次のステップは、URLパラメータを処理することです。このコードはWordPressおよびWordPress SEO by YOAST向けですが、CMSで動作するように変更するだけです。これを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;
});
一般的なアイデアは、OGパラメータのみを変更する画像ごとに個別のURLを作成して、FacebookがそれぞれのURLを個別に取得することです。 SEOの問題を回避するには、元のURLを指す正規タグをヘッダーに含める必要があります。これが 完全な記事 です。
公開バケットがあり、それでもFacebookで画像を共有できない場合は、バックエンドのs3バケット画像アップロードコードを確認してください。
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,"");
}
});
削除する ContentType: 'image/jpeg',
データオブジェクトから。