Как я могу проверить, есть ли у пользователя Facebook Timeline? - PullRequest
5 голосов
/ 17 декабря 2011

Я хочу включить определенные функции только для пользователей с разрешением «publish_actions» и временной шкалой. Как я могу определить, активировал ли пользователь временную шкалу?

Ответы [ 4 ]

4 голосов
/ 21 декабря 2011

В настоящее время нет API-способа проверить, активировал ли пользователь временную шкалу.

Вы можете попробовать использовать социальный плагин "Добавить на временную шкалу (бета)" (передавая publish_actions как perms) в сочетании с событиями Facebook JS-SDK .

Подпишитесь на события auth.login, auth.authResponseChange и / или auth.statusChange и проверяйте status свойство response, передаваемое прослушивателю событий, когда событие инициировано и пользователь connected, вы можете опубликовать действие и в случае успеха пометьте пользователя как пользователя, у которого установлена ​​временная шкала.

Это, однако, имеет некоторые недостатки:

  • Лучше не спрашивать пользователей о publish_actions в потоках, отличных от социального плагина «Добавить к временной шкале», чтобы убедиться, что у них есть как временная шкала, так и предоставленное разрешение.
  • Вы должны опубликовать действие, чтобы убедиться, что им предоставлены разрешения на это, поскольку эти события могут быть другими действиями пользователя (например, смена пароля или переключение пользователя Facebook и т. Д.).
3 голосов
/ 20 декабря 2011

1) Частичное решение состоит в том, чтобы проверить, есть ли у пользователя альбом с названием «обложки». Хотя этот альбом есть не у всех, кроме пользователей MOST, которые бы активировали временную шкалу !!

2) Верным способом является получение html-содержимого профиля пользователя и проверка наличия временной шкалы !!

1 голос
/ 10 января 2012

Следующее потенциальное решение не требует запроса дополнительных разрешений. Если вы добавите код плагина временной шкалы Facebook в скрытый DIV, вы можете подождать до завершения загрузки FB Canvas (или xfbml на веб-страницах) и проверить CSS-высоту этого элемента. Если у пользователя нет временной шкалы, он будет 0px. В противном случае, это будет 250px (как я включил). Это работает только в приложениях Facebook (не в Facebook для интеграции веб-страниц) :

Facebook скрывает этот элемент плагина, если пользователь не активировал временную шкалу, установив высоту стиля элемента на 0.

Добавьте это на страницу своего приложения:

<div id="timeline-hidden" style="display:none">
  <div class="fb-add-to-timeline" data-show-faces="true"></div>
</div>
<div id="timeline-test"></div>

Затем в вашем javascript (используйте jQuery, FYI):

window.fbAsyncInit = function () {
FB.init({ ... }); // after your FB.init code

    FB.Canvas.setDoneLoading(
  function (result) {

    var str_timeline;
    var tlsrc = $("#timeline-hidden").find("iframe").first().css("height");

    if("0px"==tlsrc)
        str_timeline = '<h2 style="color:red">This user DOES NOT have timeline.<h2>';
    else
        str_timeline = "<h2>This user DOES have timeline.</h2>";

    $("#timeline-test").html(str_timeline + ", timeline plugin css height:" + tlsrc + ", loadtime: " + result.time_delta_ms);
  }
);

};

Следующее для Веб-интеграция несколько менее надежно из-за потенциальной задержки сети, но концепция может быть изменена на какое-то работоспособное решение:

Поскольку FB.Canvas.setDoneLoading не вызывается на веб-сайте, который включает интеграцию с FB, измените приведенную выше функцию FB.Canvas.setDoneLoading, чтобы подписаться на действие xfbml.render, и установите время ожидания для теста:

window.fbAsyncInit = function () { FB.init ({...}); // после вашего кода FB.init

$(document).ready(function () {
    FB.Event.subscribe('xfbml.render',
  function () {
    setTimeout( function(){
        var str_timeline;
        var tlsrc = $("#timeline-hidden").find("iframe").first().css("height");

        if("0px"==tlsrc)
            str_timeline = '<strong><span style="color:red">This user DOES NOT have timeline.</span></strong>';
        else
            str_timeline = "<strong>This user DOES have timeline.</strong>";


        $("#timeline-test").html(str_timeline + ", timeline plugin css height:" + tlsrc);
    }, 250);
  }
);

});
* *} Тысяча двадцать-одина; * * тысяча двадцать две

В своем тестировании я обнаружил, что перемещение FB.Event.subscribe ('xfbml.render', в $ (документ) .ready (function () {... }); помогает с задержкой, когда ваше приложение встроено в страницу Facebook (загрузка занимает немного больше времени). Только что начал тестировать это, так что оно может выдержать или не выдержать дальнейшее тестирование.

1 голос
/ 22 декабря 2011

Со временем (вероятно, в ближайшем будущем) все профили будут перенесены на временную шкалу, поэтому может показаться, что Facebook не предоставил надежного способа обнаружения приложения с поддержкой временной шкалы.

...