2011-07-18 16 views
0

私はPHPで最初のFacebookアプリケーションを開発していて、それが見られているFacebook上のページがアプリで検出できるかどうか疑問に思っていました。私はいくつかの異なるページにアプリケーションを表示する予定で、アプリケーションがページごとに異なるものを表示するようにしたいと考えています。このようにして、複数の異なるものの代わりに1つの中央のアプリケーションに対するアクセス許可をユーザーが受け入れる必要があります。Facebookページタブのアプリiframeは、経由して閲覧しているページを検出できますか?

+0

[Facebookブックアプリのタブページごとに固有のIDを取得する](http://stackoverflow.com/questions/5302471/getting-a-unique-id-per-tab-page-for-a- facebook-app) – ifaour

答えて

7

はい。ページIDがsigned_request(POST)です。要求がFacebookのプロキシを経由しているため、URL全体を取得できません。

:編集

class Facebook { 

    // Facebook signed request parser  
    public static function parse($signed) 
    { 

     list($encoded, $payload) = explode('.', $signed, 2); 

     $sig = Facebook::base64_url_decode($encoded); 
     $data = json_decode(Facebook::base64_url_decode($payload), true); 

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

     return $data; 

    } 

    // Base64 decode for Facebook 
    private static function base64_url_decode($input) 
    { 
     return base64_decode(strtr($input, '-_', '+/')); 
    } 

} 

(これは私のクラスのほんの一部である)ここで、あなたがそれを行うことができますどのような方法は、ある後のちょうどページのIDに基づいてコンテンツを提供...

 $signed_request = $_POST['signed_request']; 
     $response = Facebook::parse($signed_request);    
     $page_id = $response['page']['id']; 

あなたが言っているように、ユーザーごとに一度だけ許可する必要があり、すべてのページ(私は何百もある)で使用できるようになります。これは、ユーザーがアプリケーションに「接続」しているときにsigned_requestの出力です。

Array 
(
    [algorithm] => HMAC-SHA256 
    [expires] => 0 
    [issued_at] => 1311062412 
    [oauth_token] => 
    [page] => Array 
     (
      [id] => 149715315100385 
      [liked] => 1 
      [admin] => 1 
     ) 

    [user] => Array 
     (
      [country] => ba 
      [locale] => en_US 
      [age] => Array 
       (
        [min] => 21 
       ) 

     ) 

    [user_id] => 1368368917 
) 

また、あなたは(それらのためにあなたが権限を持っている)ユーザー情報にアクセスするためのトークンを取得します、PAGE-> ID、USER_IDを見ることができます。

+0

詳細な回答ありがとう! – oliverwhite

+0

@oliverwhite、問題ありません、喜んで助けてください、私は先月Facebookのことをやってきました。だから、まだ新鮮です:) –

1

最初のアプリを作成するときに、この場所をデベロッパーアプリケーションで設定します。 facebook.com/developersにアクセスして新しいアプリを作成すると、キャンバスアプリケーションの場所を設定できるようになり、app.facebook.com/YOUR_APP_NAMEにロードされます。

+0

Mr Partner Engineer、あなたは完全に疑問を誤解していると思います。 –

+0

あなたは、「私はいくつかの異なるページにアプリケーションを表示し、各ページごとに異なるものを表示させたいと思っています。アプリは1つの場所、apps.facebook.com/YOUR_APP_CANVAS_NAMEしか表示されません。そこから、あなたが何でも欲しいものを表示することができます。異なる機能を作っているのであれば、一般に、それぞれのアプリケーションごとに別々のアプリケーションを作成したいと思うでしょう。しかし、PHPで$ _SERVER ['HTTP_REFERER']を使って参照ページのアドレスを見つけることができます。 – DSchultz

+0

リクエストがトラフプロキシに転送されているため、ユーザーがページタブ(?sk = app_ *)でアプリケーションにアクセスしているときは機能しません。 Refererはapps.facebook.comのアプリにアクセスすると機能しますが、ページIDに応じてコンテンツを提供する必要があるため、それを行うことに意味はありません。 –

関連する問題