2011-03-16 10 views
11

그래서 내 탭에서 iFrame을 사용하고 있으며 사용자가 비밀 콘텐츠를보기 위해 페이지를 좋아해야하는 "차단 된 것과 같은"중 하나를하고 있습니다. 이 작업을 더 원활하고 원활하게 수행 할 수있는 방법이 있습니까?사용자가 페이지를 좋아하는지 확인하는 매끄러운 방법

FBML으로 작성된 탭에 대해서는 권한이 필요하지 않지만 iframe이 아니기 때문에 그럴 것이라고 추측합니다.

감사합니다.

답변

20

물론 할 수 있습니다! documentation에서 언급 한 바와 같이, 페이스 북은 signed_request 당신에게 몇 가지 추가 세부 사항을 보내드립니다 :

사용자가 페이스 북 페이지로 이동, 그들은 당신의 페이지 탭 가능한 다음 탭 위치에 추가 볼 수 있습니다. 대략 페이지 탭은 캔버스 페이지와 정확히 같은 방법으로로드 된 입니다. 사용자가 페이지 탭을 선택하면 추가 매개 변수 page 1 개를 사용하여 signed_request 매개 변수를 받게됩니다. 이 매개 변수는 ID (현재 페이지의 페이지 ID), admin (사용자가 페이지의 관리자 인 경우) 및 (사용자가 페이지를 좋아하는 경우) 좋아요를 가진 JSON 개체를 포함합니다. Canvas 페이지와 마찬가지로 사용자가 앱을 승인 할 때까지 앱에서 signed_request 앱에 액세스 할 수있는 모든 사용자 정보를받을 수 없습니다.

처럼 내 tutorial해야 뭔가에서 가져온 코드 :

<?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, '-_', '+/')); 
} 
?> 

업데이트 된 코드 : 이전 코드가 작동 것이지만. 나는 요청의 유효성을 검사하지 않았습니다. 이는 누군가가 요청을 변조하고 잘못된 정보를 보낼 수 있음을 의미합니다 (: 을 true!으로 설정하는 것과 같습니다). signed_request documentation 접근법에 따라 코드가 업데이트되었습니다.

+1

감사합니다. 나는 이것을 알아 냈다. 그러나 누군가 다른 사람이 알아야 할 필요가있을 때 대답을 게시 해 주셔서 감사합니다. – John

+0

훌륭한 답변과 자습서. –

관련 문제