使用php sdk,我检查选项卡内的用户是否喜欢相应的页面。
如果我将以下代码放在index.php中并将该页面用作我的page-tab-url,
<?php
require_once("facebook/facebook.php");
// Create our application instance
// (replace this with your appId and secret).
$facebook = new Facebook(array(
'appId' => '1399475990283166',
'secret' => 'mysercret',
'cookie' => true
));
$signed_request = $facebook->getSignedRequest();
echo $signed_request['page']['liked'];
?>
它输出&#39; 1&#39;。
我想异步实现这个,所以我把php放在一个单独的文件中,尝试使用ajax来访问它
$http.post('/facebook/likes.php').
success(function(data){
console.log(data);
}).error(function(data){
console.log(data);
}
);
此示例使用的是角度,但我使用的javascript库可能并不重要。
当我使用javascript访问信息时Facebook似乎没有得到我喜欢该页面的信息。添加print_r($ facebook);在页面上,我正在检索相同的值,就好像我不在facebook-tab中一样:
(
[sharedSessionID:protected] =>
[appId:protected] => 1399475990283166
[appSecret:protected] => 679fb0ab947c2b98e818f9240bc793da
[user:protected] =>
[signedRequest:protected] =>
[state:protected] =>
[accessToken:protected] =>
[fileUploadSupport:protected] =>
[trustForwarded:protected] =>
)
我能以某种方式异步访问theese值吗?
答案 0 :(得分:1)
这是因为如果您可以访问signed_request
令牌,则只会将其记录为Facebook应用程序。此令牌随初始请求一起发送(作为POST参数),但不在任何内容的cookie中。
实际代码最简单的方法是在您发出的每个ajax请求中重新发送此签名请求参数,以便服务器和Facebook SDK可以访问该信息。
但只是检查用户是否喜欢当前页面。我建议您直接在页面上打印数据,以便从一开始就可以使用。伪示例:
<script>
window.data = {};
window.data.page_liked = <?= encode_json((boolean)$signed_request['page']['liked']) ?>;
</script>
要知道用户在启动页面上是否喜欢该页面,您可以在facebook事件中放置一个监听器:
FB.Event.subscribe("edge.create", function( response ) {`
if ( response.match(/* RegExp matching your FB page url */) ) {
// user liked!
}
});
response
是喜欢的网址,因此您只需将其与网址网址(facebook.com/MyPage
)进行比较,然后您就会知道用户是否点击了应用中的“赞”按钮。
在旁注中,通常最简单的请求用户信息的方法是登录用户(OAuth),并将请求直接从JS传递到Open Graph(无论如何都使用Angular,因此您的应用必须已经基于前端) 。您的服务器不应该用作Open Graph和您的应用程序之间的中间步骤,您将在没有优势的情况下重复代码。
这不适用于page.liked
属性,因为它是在应用加载时随signed_request
发送的网页属性(非用户)。