Pat*_*rik 101 javascript facebook facebook-graph-api
我想我会疯了.我无法让它发挥作用.
我只想检查用户是否喜欢我的iFrame应用程序中的javascript页面.
FB.api({
method: "pages.isFan",
page_id: my_page_id,
}, function(response) {
console.log(response);
if(response){
alert('You Likey');
} else {
alert('You not Likey :(');
}
}
);
Run Code Online (Sandbox Code Playgroud)
返回:False
但我是我的页面的粉丝,所以不应该返回true?!
Jas*_*ing 100
我也把头发撕成了这个.只有在用户授予了不理想的扩展权限时,您的代码才有效.
简而言之,如果您打开OAuth 2.0for Canvas高级选项,Facebook将发送一个$_REQUEST['signed_request']与您的标签应用程序中请求的每个页面一起.如果您解析该signed_request,您可以获得有关该用户的一些信息,包括他们是否喜欢该页面.
function parsePageSignedRequest() {
if (isset($_REQUEST['signed_request'])) {
$encoded_sig = null;
$payload = null;
list($encoded_sig, $payload) = explode('.', $_REQUEST['signed_request'], 2);
$sig = base64_decode(strtr($encoded_sig, '-_', '+/'));
$data = json_decode(base64_decode(strtr($payload, '-_', '+/'), true));
return $data;
}
return false;
}
if($signed_request = parsePageSignedRequest()) {
if($signed_request->page->liked) {
echo "This content is for Fans only!";
} else {
echo "Please click on the Like button to view this tab!";
}
}
Run Code Online (Sandbox Code Playgroud)
Tom*_*ero 19
你可以用(PHP)
$isFan = file_get_contents("https://api.facebook.com/method/pages.isFan?format=json&access_token=" . USER_TOKEN . "&page_id=" . FB_FANPAGE_ID);
Run Code Online (Sandbox Code Playgroud)
这将返回三个中的一个:
我想唯一不使用令牌的方法是使用刚刚发布的signed_request Jason Siffring.我的助手使用PHP SDK:
function isFan(){
global $facebook;
$request = $facebook->getSignedRequest();
return $request['page']['liked'];
}
Run Code Online (Sandbox Code Playgroud)
din*_*jas 17
你可以在JavaScript中这样做(建立@dwarfy对类似问题的回应):
<html>
<head>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<style type="text/css">
div#container_notlike, div#container_like {
display: none;
}
</style>
</head>
<body>
<div id="fb-root"></div>
<script>
window.fbAsyncInit = function() {
FB.init({
appId : 'YOUR_APP_ID', // App ID
channelUrl : 'http(s)://YOUR_APP_DOMAIN/channel.html', // Channel File
status : true, // check login status
cookie : true, // enable cookies to allow the server to access the session
xfbml : true // parse XFBML
});
FB.getLoginStatus(function(response) {
var page_id = "YOUR_PAGE_ID";
if (response && response.authResponse) {
var user_id = response.authResponse.userID;
var fql_query = "SELECT uid FROM page_fan WHERE page_id = "+page_id+"and uid="+user_id;
FB.Data.query(fql_query).wait(function(rows) {
if (rows.length == 1 && rows[0].uid == user_id) {
console.log("LIKE");
$('#container_like').show();
} else {
console.log("NO LIKEY");
$('#container_notlike').show();
}
});
} else {
FB.login(function(response) {
if (response && response.authResponse) {
var user_id = response.authResponse.userID;
var fql_query = "SELECT uid FROM page_fan WHERE page_id = "+page_id+"and uid="+user_id;
FB.Data.query(fql_query).wait(function(rows) {
if (rows.length == 1 && rows[0].uid == user_id) {
console.log("LIKE");
$('#container_like').show();
} else {
console.log("NO LIKEY");
$('#container_notlike').show();
}
});
} else {
console.log("NO LIKEY");
$('#container_notlike').show();
}
}, {scope: 'user_likes'});
}
});
};
// Load the SDK Asynchronously
(function(d){
var js, id = 'facebook-jssdk'; if (d.getElementById(id)) {return;}
js = d.createElement('script'); js.id = id; js.async = true;
js.src = "//connect.facebook.net/en_US/all.js";
d.getElementsByTagName('head')[0].appendChild(js);
}(document));
</script>
<div id="container_notlike">
YOU DON'T LIKE ME :(
</div>
<div id="container_like">
YOU LIKE ME :)
</div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
服务器上的channel.html文件只包含以下行:
<script src="//connect.facebook.net/en_US/all.js"></script>
Run Code Online (Sandbox Code Playgroud)
那里有一些代码重复,但你明白了.这将在用户第一次访问页面时弹出登录对话框(这不是很理想,但有效).在随后的访问中,不应该弹出任何东西.
DrC*_*sos 16
虽然这篇文章已经存在了很长一段时间,但解决方案并不是纯粹的JS.尽管Jason指出请求权限并不理想,但我认为这是一件好事,因为用户可以明确拒绝它.我仍然发布这个代码,但(几乎)同样的事情也可以在ifaour的另一篇文章中看到.考虑这个只有JS的版本而不太注重细节.
基本代码相当简单:
FB.api("me/likes/SOME_ID", function(response) {
if ( response.data.length === 1 ) { //there should only be a single value inside "data"
console.log('You like it');
} else {
console.log("You don't like it");
}
});
Run Code Online (Sandbox Code Playgroud)
或者,替换me为其他人的正确UserID(您可能需要更改以下权限才能执行此操作friends_likes),如上所述,您需要的不仅仅是基本权限:
FB.login(function(response) {
//do whatever you need to do after a (un)successfull login
}, { scope: 'user_likes' });
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
151927 次 |
| 最近记录: |