我正在为Facebook制作简单的页面标签,但它似乎只在Mac上的Safari上出现问题。使用Windows上的Safari,没有问题。该页面有3种类型 - fangate(当用户不喜欢页面时),主页面(喜欢时)和第3页面的链接。当我进入页面选项卡时,它会显示fangate。然后我“喜欢”页面并显示主页面,但当我点击第3页的链接时,它会显示fangate。我认为它正在失去signed_request会话。有没有办法在不使用会话的情况下在每个页面上传递signed_request?
答案 0 :(得分:1)
我不确定您是否使用PHP SDK。如果是这样,此代码可能适合您。如果找到已签名的请求(因为在您喜欢该页面后它将位于主页面上),请将其存储在会话中。对于之后的每个页面,您将检查已签名请求的会话版本。此代码必须在每个页面上(包括或您选择)。
<? php
//get signed request
$signedRequest = $facebook - > getSignedRequest();
//check if inital vars can be used or use session loaded vars
if (isset($signedRequest)) {
echo '<!-- INITIAL LOAD -->';
$_SESSION['signedRequest'] = $signedRequest;
} else {
echo '<!-- STORED SESSION -->';
$signedRequest = $_SESSION['signedRequest'];
}
//check like status
$liked = (!$signedRequest['page']['liked'] ? false : true);
//check if page is liked
if ($liked === false) {
//********************* NOT LIKED, SHOW LIKE GATE *********************
} else {
//********************* LIKED, SHOW PAGE CONTENT *********************
}
?>
答案 1 :(得分:0)
对不起,迟到了。是的,我正在使用PHP SDK和你在那里写的完全相同的代码(检查signedRequest,如果有一个 - &gt;将它存储在会话中,否则 - >从会话中获取它)。但似乎Safari正在失去会话参数。我认为工作的两种方式是:
定位到_top的所有链接并添加参数,因此每次用户更改页面时,它都会重新加载整个页面(不仅在iframe中)并通过app_data传递变量。
< / LI>将signedRequest添加到每个链接,因此每当用户切换页面时,url中都会有signedRequest。这种方法实际上不会刷新整个页面,因为它在iframe网站上发送参数,所以它比第一个更好一些。
这两种方法都需要在链接中传递数据,我不想这样做,因为我必须更改应用中的每个链接。我还没有尝试将signedRequest存储在cookie中。
但是,如果有其他方式,这不需要更改主要链接或在cookie中存储数据,我会很高兴听到它们。