私は Facebookメッセンジャーチェックボックス を機能させようとしています、私は私のhtmlに次のコードを追加しました
window.fbAsyncInit = function() {
FB.init({
appId: "{{ fb_app_id }}",
xfbml: true,
version: "v2.6"
});
FB.Event.subscribe('messenger_checkbox', function(e) {
console.log("messenger_checkbox event");
console.log(e);
if (e.event == 'rendered') {
console.log("Plugin was rendered");
} else if (e.event == 'checkbox') {
var checkboxState = e.state;
console.log("Checkbox state: " + checkboxState);
} else if (e.event == 'not_you') {
console.log("User clicked 'not you'");
} else if (e.event == 'hidden') {
console.log("Plugin was hidden");
}
});
};
(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'));
<div class="fb-messenger-checkbox"
Origin="my.site.com"
page_id="{{ fb_page_id }}"
messenger_app_id="{{ fb_app_id }}"
user_ref="{{ user_token }}"
prechecked="true"
allow_login="true"
size="xlarge"></div>
しかし、ページを更新するたびに、メッセンジャーのチェックボックスが表示されず、代わりにChromeのコンソールでエラーが発生します
Refused to display 'https://www.facebook.com/v2.6/plugins/messenger_checkbox.php?allow_login=tr…&user_ref=1tYPmZaYMKXKfcZiUtaENYTXH3H49OTP7tJrt5fyobCgepqziMA0Z037T5gto9o3'
in a frame because an ancestor violates the following Content Security Policy directive:
"frame-ancestors https://www.facebook.com".
誰かがこれを修正する方法を知っているかもしれませんか?過去24時間立ち往生しています。
編集:ドキュメントには、ドメインをホワイトリストとして追加する必要があると記載されていますが、このエラーは引き続き発生します。
この問題には2つの解決策があります。
ドメインをホワイトリストに登録 (プロトコルとポートを含む)プラグインがホストされているページ。これをローカルでテストするとき、私は http:// localhost:3000/signup で実行されているnodejsアプリでプラグインをホストしていました。また、 ngrok を使用して、ローカルサーバーをリモートで公開し、ローカルマシンで オプトインコールバック を処理できるようにしました。ページにアクセスするには、ブラウザのURLフィールドに入力したドメインをホワイトリストに登録する必要があることがわかりました。これは当たり前のように思えるかもしれませんが、 http://abc364ef.ngrok.io のように見えて機能しなかったngrokドメインを使用しようとし続けました。私の場合、 http:// localhost:3000/signup を介してページにアクセスしていたため、次のホワイトリストコマンドを使用する必要がありました。
curl -X POST -H "Content-Type: application/json" -d '{
"whitelisted_domains":[
"http://localhost:3000"
]
}' "https://graph.facebook.com/v2.6/me/messenger_profile?access_token=PAGE_ACCESS_TOKEN"
また、<div class="fb-messenger-checkbox"
ブロックのOrigin
属性でこれと同じドメインを使用する必要がありました。その後、実際にngrokドメインを使用できることがわかりましたが、 http://abc364ef.ngrok.io/signup を使用してページにアクセスする必要があり、遅すぎました。だから私は http:// localhost:30 に固執することを好みました。
ドメインをホワイトリストに登録する必要があります https://developers.facebook.com/docs/messenger-platform/messenger-profile/domain-whitelisting
1)ページ上部の[設定]をクリックします
2)左側の[メッセンジャープラットフォーム]をクリックします
3)[ホワイトリストに登録されたドメイン]セクションでページのホワイトリストに登録されたドメインを編集します
私たちのプロジェクトでは、いくつかの障害点を特定しました。ここに トラブルシューティングのヒント :
user_ref
は常に一意である必要があります。 (ページが更新されるたびに!)allow_login
パラメータがfalseに設定されている場合、有効なFacebookユーザーセッションが必要です(つまり、ページとしてログインしていない)。そうでない場合、プラグインは非表示になります。Origin
属性は、プラグインをホストするドメインと同じですか?appId
とmessenger_app_id
in <div class="fb-messenger-checkbox"
同じ値を持ちます。