0

プリロードされた画像を投稿する小さなFacebookアプリがあります。コード構造を変更したので、すべての変数を config.php に移動したので、より快適になりました。しかし、その後、アプリが機能せず、その理由が本当にわかりません... 許可ダイアログの後、何度も何度も再読み込みされます... 誰かバグを見つけてもらえますか?

これは index.php です:

<?php

require 'facebook.php';
require 'config.php';

$facebook = new Facebook(array(
'appId' => $appId,
'secret' => $appSecret,
'baseUrl' => $baseUrl,
'appBaseUrl' => $appBaseUrl,
'fileUpload' => 'true',
'cookie' => 'true'
));

if (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) {
    $baseUrl = str_replace('http','https',$baseUrl);
    $fbPageURL = str_replace('http','https',$fbPageURL);
    $fbPageAppURL = str_replace('http','https',$fbPageAppURL);
}else{
    // not https
}

    $signed_request = $facebook->getSignedRequest();
    $page_id = $signed_request["page"]["id"];
    $like_status = $signed_request["page"]["liked"];

        if(!$like_status){
            header("Location: notfan.php");
            exit;
        }

$user = $facebook->getUser();

$params = array(
  scope => 'publish_stream,user_photos',
  redirect_uri => $fbPageAppURL
    );

$loginUrl = $facebook->getLoginUrl($params);
$app_data = $signed_request["app_data"];

?>
                    <!doctype html>
                    <html xmlns:fb="http://www.facebook.com/2008/fbml">
                    <head>
                    <title><?php echo $appName; ?></title>
                    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
                    <style>
                        a:link    {color:#f1effc;}
                        a:visited {color:#f1effc;}
                        a:hover   {color:#19378d;}
                        a:active  {color:#19378d;}
                        a:link    {text-decoration: none}
                    </style>
                    </head>
                    <body>
                    <script type="text/javascript">
                        function NotInFacebookFrame() {
                            return top === self;
                         }
                        function ReferrerIsFacebookApp() {
                            if(document.referrer) {
                                return document.referrer.indexOf("apps.facebook.com") != -1;
                        }
                         return false;
                         }
                        if (NotInFacebookFrame() || ReferrerIsFacebookApp()) {
                            top.location.replace("<?= $fbPageAppURL ?>");
                        }
                    </script>

<?php if($user){

        try {
                $user_profile = $facebook->api('/me'); 

                $scope = 'publish_stream,user_photos'; 
                $scope_params = explode(',',$scope);

                $permissions = $facebook->api("/me/permissions"); 

                    if( array_key_exists('publish_stream', $permissions['data'][0]) &&  array_key_exists('user_photos', $permissions['data'][0])) {

                    // the main app logic here

                    } else {
                        $user = null;
                    }


    } catch (FacebookApiException $e) {
            error_log($e);
            $user = null;
        }
    }

    if ($user) {
    // logged in user
    } else {
        // not logged in or not authenticated
        echo '<script type="text/javascript">top.location.href = "'.$loginUrl .'";</script>';
    }

?>  
</body>
</html>

そしてconfig.php:

<?php
$appName = 'the name';
$appId = '123456789';
$appSecret = '1324v3434v34v';
$baseUrl = 'http://www.domain.com/app-name/';
$appBaseUrl = 'http://apps.facebook.com/zzzzzzz/';
$fbPageURL = 'http://www.facebook.com/xxxxxxx';
$fbPageAppURL = $fbPageURL.'?sk=app_'.$appId;
?>

どうもありがとうございました!!

4

2 に答える 2

1

結局のところ、これはサーバー構成の失敗でした。

于 2012-05-15T09:12:30.470 に答える
0

$user = $facebook->getUser(); をラップします。try/catch で、キャッチされた例外をエコーし​​ます。これにより、ユーザーがログオンしていない理由がわかります。


詳細 - 以下のコメントの後。

Javascript でドキュメント リファラーを確認しますが、私のテストでの実際のリファラーは「http://static.ak.facebook.com/platform/page_proxy.php?v=4」だったので、これはその条件に失敗します。これにより、ループが発生します。

キャンバスにいるかどうかを確認するには、PHP SDK を使用して signed_request を取得します。

$facebook->signed_request();

これが空の場合、キャンバス (またはページ タブ) にいないため、キャンバスにリダイレクトします。JavascriptではなくPHPでそれを行います。

于 2012-05-11T23:16:15.540 に答える