繁体   English   中英

检查用户是否喜欢页面的无缝方式

[英]Seamless way to check if user likes page

因此,我在标签上使用了iFrame,并且正在做其中一种“类似障碍”,用户需要喜欢该页面才能查看机密内容。 有没有一种更好,更无缝的方法来进行此操作,而不必征求许可?

我知道使用FBML构建的标签页,他们不要求许可,但是我猜这是因为它不是iframe。

谢谢!

当然可以! 文档中所述,Facebook将在signed_request向您发送一些其他详细信息:

当用户导航到Facebook页面时,他们将在下一个可用的标签位置看到您的“页面标签”。 大致而言,页面选项卡的加载方式与画布页面完全相同。 当用户选择“页面选项卡”时,您将收到带有另一个附加参数page的signed_request参数。 此参数包含一个JSON对象,其ID为ID(当前页面的页面ID),admin(如果用户是该页面的管理员)和被喜欢(如果用户喜欢该页面)。 与“画布页面”一样,在用户授权您的应用之前,您将不会在signed_request中收到您的应用可访问的所有用户信息。

从我的教程中获取的代码应类似于:

<?php
if(empty($_REQUEST["signed_request"])) {
    // no signed request where found which means
    // 1- this page was not accessed through a Facebook page tab
    // 2- a redirection was made, so the request is lost
    echo "signed_request was not found!";
} else {
    $app_secret = "APP_SECRET";
    $data = parse_signed_request($_REQUEST["signed_request"], $app_secret);
    if (empty($data["page"]["liked"])) {
        echo "You are not a fan!";
    } else {
        echo "Welcome back fan!";
    }
}

function parse_signed_request($signed_request, $secret) {
    list($encoded_sig, $payload) = explode('.', $signed_request, 2); 

    // decode the data
    $sig = base64_url_decode($encoded_sig);
    $data = json_decode(base64_url_decode($payload), true);

    if (strtoupper($data['algorithm']) !== 'HMAC-SHA256') {
        error_log('Unknown algorithm. Expected HMAC-SHA256');
        return null;
    }

    // check sig
    $expected_sig = hash_hmac('sha256', $payload, $secret, $raw = true);
    if ($sig !== $expected_sig) {
        error_log('Bad Signed JSON signature!');
        return null;
    }

    return $data;
}

function base64_url_decode($input) {
    return base64_decode(strtr($input, '-_', '+/'));
}
?>

更新的代码:虽然以前的代码可以工作。 我没有检查请求的有效性。 这意味着有人可能篡改请求并向您发送虚假信息( 例如将admin设置为true )。 遵循signed_request文档方法,代码已更新。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM