当前位置: 首页 > 面试题库 >

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

元俊雅
2023-03-14
问题内容

因此,我在标签上使用了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, '-_', '+/'));
}
?>

更新的代码: 虽然以前的代码可以工作。我没有_检查_请求的有效性。这意味着有人可以篡改请求并向您发送虚假信息(例如将设置admintrue)。代码已按照signed_request文档编制方法进行了更新。



 类似资料:
  • 问题内容: 我正在尝试创建一个Facebook iFrame应用。该应用程序应首先显示图像,如果用户喜欢该页面,则可以访问某些内容。 我使用RoR,因此无法使用Facebook PhP SDK。 当用户不喜欢该页面时,这是我的iFrame HTML: 并且,如果用户喜欢该页面: 问题答案: 如此答应的是我只使用javascript的答案: 页面正文的内容: CSS: 最后是javascript:

  • 问题内容: 我只想检查用户是否喜欢应用程序中带有javascript的页面。 返回值:False 但是我是页面的粉丝,所以它不应该返回true吗? 问题答案: 我也把这根头发撕掉了。仅当用户授予了不理想的扩展权限时,您的代码才起作用。 简而言之,如果您打开forCanvas高级选项,Facebook将在选项卡应用程序中与请求的每个页面一起发送。如果您解析了signed_request,则可以获得有

  • 喜欢 喜欢一个回答 取消喜欢一个回答 一个回答的喜欢列表 喜欢一个回答 POST /api/v2/question-answers/:answer/likes 响应 Header 201 Created { "message": [ "操作成功" ] } 取消喜欢一个回答 DELETE /api/v2/question-answers/:answer/likes 响应 Hea

  • 问题内容: 是否可以在一个查询中将多个SQL LIKE通配符串在一起-像这样? 目的是查找同时包含通配符但没有特定顺序的记录。 问题答案: 正确的SQL语法是:

  • 喜欢资讯 取消喜欢资讯 资讯喜欢列表 喜欢资讯 POST /news/{news}/likes Response Headers Status: 201 Created 取消喜欢资讯 DELETE /news/{news}/likes Response Headers Status: 204 No Content 资讯喜欢列表 GET /news/{news}/likes Respons

  • 点喜欢 取消喜欢 喜欢的人列表 点喜欢 POST /feeds/:feed/like Response Status: 201 Created { "message": [ "操作成功" ] } 通知类型 { "channel": "feed:digg", // 通知关键字 "target": 325, // 动态id "content": "@2222 点喜欢了