Я хочу включить определенные функции только для пользователей с разрешениями «publish_actions» и Timeline. Как определить, включен ли пользователь Timeline?Как проверить, есть ли у пользователя Facebook Timeline?
ответ
1) Частичное решение - проверить, есть ли у пользователя альбом с именем «обложка». Хотя не все, кроме пользователей MOST, у которых была бы активированная временная шкала, был бы этот альбом!
2) Верный способ - фактически загрузить html-содержимое профиля пользователя и проверить, имеет ли он график!
В настоящее время 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 и т. Д.).
В конце концов (вероятно, в ближайшем будущем) профиль каждого человека будет перенесен на Timeline, поэтому, казалось бы, facebook не предоставил надежного способа обнаружения приложения с поддержкой временной шкалы.
Следующее потенциальное решение не требует дополнительных разрешений. Если вы добавите код плагина на временную шкалу 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 (требуется немного больше времени для загрузки). Просто приступите к тестированию, чтобы он мог или не мог удержаться до дальнейшего тестирования.