异步获取脸书选项卡中的用户数据

Asynchronously get user data in facebook tab?

本文关键字:用户 用户数 数据 获取 选项 异步      更新时间:2023-09-26

使用 php sdk,我检查选项卡内的用户是否喜欢相应的页面。

如果我将以下代码放在索引中.php并将该页面用作我的页面标签网址,

<?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'];
?>

它输出"1"。

我想异步实现这一点,所以我将 php 放在一个单独的文件中并尝试使用 ajax 访问它

$http.post('/facebook/likes.php').
    success(function(data){
        console.log(data);
    }).error(function(data){
        console.log(data);
        }
    );

此示例使用的是 angular,但我使用的 JavaScript 库可能无关紧要。

当我使用javascript访问信息时,Facebook似乎没有得到我喜欢该页面的信息。添加print_r($facebook);在页面上,我正在检索相同的值,就好像我不在Facebook选项卡中一样:

(
    [sharedSessionID:protected] => 
    [appId:protected] => 1399475990283166
    [appSecret:protected] => 679fb0ab947c2b98e818f9240bc793da
    [user:protected] => 
    [signedRequest:protected] => 
    [state:protected] => 
    [accessToken:protected] => 
    [fileUploadSupport:protected] => 
    [trustForwarded:protected] => 
)

我可以以某种方式异步访问这些值吗?

这是因为只有当您

可以访问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是喜欢的URL,因此您只需将其与您的页面URL(facebook.com/MyPage)进行比较,然后您就知道用户是否单击了应用程序中的"喜欢"按钮。


附带说明一下,通常请求用户信息最干净的方法是登录用户(OAuth),并将请求直接从JS传递到Open Graph(无论如何你都使用Angular,所以你的应用程序必须已经是基于前端的)。您的服务器不应用作 Open Graph 和应用之间的中间步骤,您将复制代码而没有优势。

这不适用于 page.liked 属性,因为它是在应用加载时随signed_request一起发送的页面属性(不是用户属性)。