2011-12-17 2 views

ответ

3

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

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

4

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

Вы можете попробовать использовать "Add To Timeline (beta)" social plugin (прохождение publish_actions в perms) в сочетании с Facebook JS-SDK Events.

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

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

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

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

1

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

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

Добавьте это к вашему App страницы:

<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); 
    } 
); 

}; 

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

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

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 (функция() {...}); помогает с задержкой, когда ваше приложение встроено в страницу Facebook (требуется немного больше времени для загрузки). Просто приступите к тестированию, чтобы он мог или не мог удержаться до дальнейшего тестирования.