喜欢FB页面确认之后不会触发edge.create事件

时间:2017-10-06 10:55:57

标签: javascript jquery facebook-javascript-sdk

以下代码以前有效,但现在没有。由于FB在喜欢页面时添加了确认框,因此在确认后不再触发edge.create。

    <div class="fb-page" data-href="{{ $fbPageUrl }}" data-tabs="timeline" data-small-header="false" data-adapt-container-width="true" data-hide-cover="false" data-show-facepile="true"></div>
    <script>
        $(document).ready(function() {
            $.getScript('//connect.facebook.net/en_US/sdk.js', function(){
                FB.init({
                    appId      : 'xxxxxxxxxxxxxx',
                    xfbml      : true,
                    version    : 'v2.9'
                });

                FB.Event.subscribe('edge.create', function(response) {
                    alert('Fired!');
                });
            });
        });
    </script>

4 个答案:

答案 0 :(得分:5)

您无法再订阅edge.create。目前(04/2018),它仍在documentation,但已被弃用,并在不久的将来完全删除。

按照设计,第三方应用程序无法知道何时单击Like button

您需要以不需要了解iframe中提供的Facebook赞按钮的方式设计您的应用。

引用此bug report

  

不推荐使用edge.create事件(https://developers.facebook.com/docs/plugins/faqs/),因此工程师决定不为此案例修复它,因为它将在未来的api版本中完全取出。

来自this one

  

我知道这对您很重要,但不幸的是,由于政策问题,我们故意进行了弃用。

  

开发人员不应再检查用户按下了。

答案 1 :(得分:2)

我怀疑这是来自Facebook新更新的错误。您可以在此处https://developers.facebook.com/bugs搜索问题,如果尚未报告,也可以发布新错误

答案 2 :(得分:2)

  

这些事件将不再可用。或者,您可以使用我们的Webhooks,并在有人喜欢您的Facebook页面之一时收到通知。

This is the webhooks endpoint

Source

答案 3 :(得分:0)

目前有效的解决方案:

<!doctype html>
<html lang="en" xmlns:fb="https://www.facebook.com/2008/fbml">
<head>
    <meta charset="utf-8">
    <title>Facebook Like Button</title>
</head>
<body>
<div id="fb-root"></div>
<script>
    window.fbAsyncInit = function () {
        FB.init({appId: '1906177386133148', status: true, cookie: true, xfbml: true});
        FB.Event.subscribe("edge.create", function (targetUrl) {
            console.log('edge.create');
        });
        FB.Event.subscribe("edge.remove", function (targetUrl) {
            console.log('edge.remove');
        });
    };
    (function () {
        var e = document.createElement('script');
        e.async = true;
        e.src = document.location.protocol + '//connect.facebook.net/es_ES/all.js';
        document.getElementById('fb-root').appendChild(e);
    }());
</script>
<fb:like></fb:like>
</body>
</html>