0

このコードを使用して、アプリに入る前にユーザーがページを「気に入った」かどうかを確認しています。

require_once 'facebook-php-sdk/src/facebook.php';
        // Create our Application instance.
        $this->facebook = new Facebook(array(
          'appId' => 'APPID',
          'secret' => 'APPSECRET',
          'cookie' => true,
        ));
        $session = $this->facebook->getSession();
        if(!empty($session)) {
            $access_token = $this->facebook->getAccessToken();
            $fql_multiquery_url = 'https://graph.facebook.com/me/likes?access_token='.$access_token;
            $fql_multiquery_result = file_get_contents($fql_multiquery_url);
            $fql_multiquery_obj = json_decode($fql_multiquery_result, true);
            $liked = false;
            foreach($fql_multiquery_obj['data'] as $like){
                if($like['id'] == 'PageID'){
                    $liked = true;
                }
            }
            if($liked){
                $data['main_content'] = 'welcome_message';
            } else {
                $data['main_content'] = 'before_like';
            }
            $this->load->view('includes/template', $data);
        } else {
            $req_perms = "publish_stream,offline_access,user_status,email,read_stream,user_likes";
            $login_url = $this->facebook->getLoginUrl(array('canvas'=> 1,'fbconnect' => 0,'req_perms' => $req_perms, 'redirect_uri' => 'APP REDIRECT URL'));
            echo "<script type='text/javascript'>top.location.href = '$login_url';</script>";exit;
        }

(あなたの好きなものをループすることが最善の解決策ではないことは知っていますが、私にとっては最も一貫して機能するようです)。

私には問題なく動作します (オフィス内の他のユーザーも問題なく動作します) が、一部のユーザーには失敗します (もちろん、エラー メッセージは送信されません)。いいねをチェックして一貫性を持たせるより良い方法はありますか?

4

2 に答える 2

0

次のような特定のページにアクセスできるはずです。

$resp = $this->api('/me/likes/'.$page_id);
$is_fan = (count($resp['data']) !== 0);

ただし、Facebook の内部キャッシュが動作している場合、これは役に立ちません。また、このリクエストが Facebook タブで実行される場合、署名されたリクエストには fan/no_fan 情報も含まれている必要がありますsigned_request(フィールドと値に関する部分を参照してください)。私の経験でsigned_requestは、 が最も信頼できるように思えました。

PS:

かなり古いバージョンの php SDK を使用しているようです。getSession()メソッドは廃止されました。

于 2012-08-24T16:27:30.950 に答える
0
function parsePageSignedRequest() {
if (isset($_REQUEST['signed_request'])) {
  $encoded_sig = null;
  $payload = null;
  list($encoded_sig, $payload) = explode('.', $_REQUEST['signed_request'], 2);
  $sig = base64_decode(strtr($encoded_sig, '-_', '+/'));
  $data = json_decode(base64_decode(strtr($payload, '-_', '+/'), true));
  return $data;
}
return false;

}

    $signed_request = $_REQUEST['signed_request'];

//check for page liked or not
if($signed_request = parsePageSignedRequest())
{
  if($signed_request->page->liked) {
      echo "<link rel='stylesheet' type='text/css' href='style.css' />";
  } else {
      echo "<link rel='stylesheet' type='text/css' href='notfanstyle.css' />";
  }
}   

:)これを試してください、それは私にとってはうまくいきました。

于 2012-08-28T09:22:27.217 に答える