1

Facebook のタブ ページを作成していて、ファン ゲーティングを使用したいと考えています。

以前はファン ゲーティングを使用していて問題はありませんでしたが、これは 4 か月前のようなものでした。同じPHPを使用していますが、今回は問題が発生しています。

私のアプリの基本的なコードとファンゲートの条件ステートメントの下を参照してください...

しかし、何らかの理由でこのエラーが発生します...

注意: 未定義のインデックス: 126 行目の /home/sites/example.co.uk/www/competition/index.php の signed_request 注意: 未定義のオフセット: /home/sites/example.co.uk/www/competition/ の 1 128行目のindex.php


変..

これまでこれを使用する際に問題が発生したことはありません。Facebook はこれの動作方法を変更しましたか?

どんな助けでも大歓迎です。


<?php

$fb_app_id   = '000000000000000';           
$fb_secret   = '00000000000000000000000000000000';
$fb_app_url  = 'http://example.co.uk/competition';  
$fb_tab_url  = 'http://www.facebook.com/example/app_000000000000000';
$fb_channel  = '//example.co.uk'

require 'src/facebook.php';

//Create facebook application instance.
$facebook = new Facebook(array(
  'appId'  => $fb_app_id,
  'secret' => $fb_secret,
  'cookie' => true,
));

?>

<!DOCTYPE html>
<html>
<head>

    <meta property="fb:app_id" content="<?php echo $fb_app_id ?>" />

</head>

<body>

    <div id="fan-gate">

        <?php

            $signed_request = $_REQUEST["signed_request"];

            list($encoded_sig, $payload) = explode('.', $signed_request, 2);

            $data = json_decode(base64_decode(strtr($payload, '-_', '+/')), true);

            if (empty($data["page"]["liked"])) {

        ?>

            LIKE US...      

        <?php } else { ?>

            <strong>YOU'VE LIKED OUR PAGE, THANKS!!!</strong>

        <?php } ?>

    </div>

    <div id="fb-root"></div>

    <script>

        window.fbAsyncInit = function() {
            FB.init({
                appId: '<?php echo $fb_app_id ?>',
                channelUrl : '<?php echo $fb_channel ?>/channel.html', // Channel File
                cookie: true,
                xfbml: true,
                oauth: true,
                status: true
            });
            FB.Canvas.setAutoGrow(true);
        };

    </script>

</body>
</html>


これも試してみましたが、ページが気に入らなかったとしても、常に2番目の条件が表示されます。

<?php

$fb_app_id   = '000000000000000';           
$fb_secret   = '00000000000000000000000000000000';
$fb_app_url  = 'http://example.co.uk/competition';  
$fb_tab_url  = 'http://www.facebook.com/example/app_000000000000000';
$fb_channel  = '//example.co.uk'

require 'src/facebook.php';

//Create facebook application instance.
$facebook = new Facebook(array(
  'appId'  => $fb_app_id,
  'secret' => $fb_secret,
  'cookie' => true,
));

?>

<!DOCTYPE html>
<html>
<head>

    <meta property="fb:app_id" content="<?php echo $fb_app_id ?>" />

</head>

<body>

    <div id="fan-gate">

        <?php

        $signed_request = $facebook->getSignedRequest();

        $like_status = $signed_request["page"]["liked"];

        if($like_status){

            echo 'LIKE US...';

        } else {

            echo '<strong>YOU'VE LIKED OUR PAGE, THANKS!!!</strong>';

        }

    ?>

    </div>

    <div id="fb-root"></div>

    <script>

        window.fbAsyncInit = function() {
            FB.init({
                appId: '<?php echo $fb_app_id ?>',
                channelUrl : '<?php echo $fb_channel ?>/channel.html', // Channel File
                cookie: true,
                xfbml: true,
                oauth: true,
                status: true
            });
            FB.Canvas.setAutoGrow(true);
        };

    </script>

</body>
</html>
4

2 に答える 2

0

私はなんとかファンゲーティングをこのように機能させることができました。

もっとシンプルなようで、うまく機能します。

また、私はページ管理者を「ファンのように」扱っています...

<?php

$fb_app_id   = '000000000000000';           
$fb_secret   = '00000000000000000000000000000000';
$fb_app_url  = 'http://example.co.uk/competition';  
$fb_tab_url  = 'http://www.facebook.com/example/app_000000000000000';
$fb_channel  = '//example.co.uk'

require 'src/facebook.php';

//Create facebook application instance.
$facebook = new Facebook(array(
  'appId'  => $fb_app_id,
  'secret' => $fb_secret,
  'cookie' => true,
));

$signedRequest = $facebook->getSignedRequest();

?>

<!DOCTYPE html>
<html>
<head>

    <meta property="fb:app_id" content="<?php echo $fb_app_id ?>" />

</head>

<body>

    <div id="fan-gate">

        <?php if ( ( $signedRequest['page']['liked'] || $signedRequest['page']['admin'] ) == 1 ) { ?>

            Like us...

        <?php } else { ?>

            <strong>You've Liked our page</strong>

        <?php } ?>

    </div>

    <div id="fb-root"></div>

    <script>

        window.fbAsyncInit = function() {
            FB.init({
                appId: '<?php echo $fb_app_id ?>',
                channelUrl : '<?php echo $fb_channel ?>/channel.html', // Channel File
                cookie: true,
                xfbml: true,
                oauth: true,
                status: true
            });
            FB.Canvas.setAutoGrow(true);
        };

    </script>

</body>
</html>
于 2012-06-25T14:20:22.663 に答える
0

signed_requestが見つからない唯一の理由は、リダイレクトのためです。アプリが iframe をサイトの別のページにリロードまたはリダイレクトしていないことを確認してください。ページ間で手動で渡さない限り、最初のsigned_requestページでのみ使用できます。

于 2012-06-25T11:25:51.257 に答える