Самый простой способ поделиться динамическим контентом в новостной ленте Facebook с помощью Javascript? - PullRequest
4 голосов
/ 28 ноября 2011

Я хочу, чтобы мои пользователи могли обмениваться динамическим контентом в своей ленте новостей на Facebook.Нет другой интеграции с Facebook (например, регистрация на Facebook или другая интеграция на стороне сервера), поэтому я хочу, чтобы это было как можно более легким.

Это то, что я получил, но как это выглядит?Кажется, это работает, но я не уверен, что я все продумал.

<button id="fb-publish">Share to Facebook</button>

<script type="text/javascript">
(function() {
    FB.init({
        appId: MY_FACEBOOK_APP_ID, cookie: true, status: true, xfbml: true, oauth: true
    });
    var fbAuth = null;
    var fbShare = function() {
        FB.ui({
            method: "feed",
            display: "iframe",
            link: "http://example.com/",
            caption: "Example.com",
            description: "Here is the text I want to share.",
            picture: "http://example.com/image.png"
        });
    };
    $("#fb-publish").click(function() {
        if (!fbAuth) {
            FB.login(function(response) {
                if (response.authResponse) {
                    fbAuth = response.authResponse;
                    fbShare();
                }
            }, {scope: 'publish_stream'});
        } else {
            fbShare();
        }
    });
})();
</script>

Кроме того, если я хочу прикрепить изображение с URL (больше, чем просто изображение 50x50 пикселей, определенное вполе picture), как я могу сделать это только с помощью JavaScript?Или я могу?

Ответы [ 2 ]

1 голос
/ 29 ноября 2011

Я решил опустить authResponse кэширование и каждый раз звонить FB.login().Он ненадолго открывает всплывающее окно, но, по крайней мере, нет случая, когда пользователь вышел из системы на другой вкладке или в другом окне, а кэшированный authResponse устарел.Коротко мигающее всплывающее окно не является большой проблемой, так как я не думаю, что пользователи все равно будут использовать одну и ту же страницу несколько раз.

Вот мой окончательный код, который даже проще, чем оригинальный:

<button id="fb-publish">Share to Facebook</button>

<script type="text/javascript">
(function() {
    FB.init({
        appId: MY_FACEBOOK_APP_ID, cookie: true, status: true, xfbml: true, oauth: true
    });
    var fbShare = function() {
        FB.ui({
            method: "feed",
            display: "iframe",
            link: "http://example.com/",
            caption: "Example.com",
            description: "Here is the text I want to share.",
            picture: "http://example.com/image.png"
        });
    };
    $("#fb-publish").click(function() {
        FB.login(function(response) {
            if (response.authResponse) {
                fbShare();
           }
        }, {scope: 'publish_stream'});
    });
})();
</script>

И, как упоминал Толга Арикан, если для вас нормально, что диалоговое окно обмена открывается во всплывающем окне, вам даже не нужно звонить FB.login() и запрашивать разрешение publish_stream;просто позвоните FB.ui({ method: "feed" }) напрямую, и все готово:

<button id="fb-publish">Share to Facebook</button>

<script type="text/javascript">
(function() {
    FB.init({
        appId: MY_FACEBOOK_APP_ID, cookie: true, status: true, xfbml: true, oauth: true
    });
    $("#fb-publish").click(function() {
        FB.ui({
            method: "feed",
            link: "http://example.com/",
            caption: "Example.com",
            description: "Here is the text I want to share.",
            picture: "http://example.com/image.png"
        });
    });
})();
</script>
0 голосов
/ 28 ноября 2011

1) Убедитесь, что appId определен.

2) В файле FB.login response.authResponse может не работать.Я не совсем уверен, но просто киньте console.log, он может вызвать response.session

3) в методе: feed, вы можете поместить изображения большего размера для изображения, но он уменьшится в размерах.Невозможно поместить большие изображения в качестве эскиза канала.Это всего лишь большой палец канала.

Для самого легкого метода: feed js, вам не нужно отображать: я думаю, iframe.

FB.ui( {
method: 'feed',
name: 'Facebook Dialogs',
link: 'http://developers.facebook.com/docs/reference/dialogs/',
picture: 'http://fbrell.com/f8.jpg',
caption: 'Reference Documentation',
description: 'Dialogs provide a simple, consistent interface for applications to interface with users.' }, function(response) {} });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...