2012-05-11 17 views
0

私は少しのプリインストールされた画像を投稿する小さなFacebookアプリを持っています。私はコード構造を変更したので、すべての変数をconfig.phpに移動したので、もっと快適になりました。しかし、その後、アプリが動作しないと私は本当に理由がわからない...許可ダイアログの後、それは何度も自分自身を再ロード...誰かがバグを指摘することができますか?Facebookのアプリは許可の後に自分自身をリロードします

<?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:

これはindex.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; 
?> 

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

答えて

1

明らかになったように、サーバー構成の障害でした。

0

折り返し$ user = $ facebook-> getUser(); try/catchで捕捉された例外をエコーし​​ます。これは、ユーザーがログオンしていない理由を示します。


詳細 - 下記のコメントの後に。

あなたのJavascriptでドキュメントリファラーをチェックしますが、私のテストの実際の参照元は "http://static.ak.facebook.com/platform/page_proxy.php?v=4"でしたので、これはその条件に失敗します。これにより、ループが発生します。あなたがキャンバスにしている場合だけ、これが空であるなら、あなたはキャンバス(またはページタブ)ではありませんよPHP SDKに

$facebook->signed_request(); 

を使用してsigned_requestを取得し、確認するようにリダイレクトする

キャンバス。 PHPで行いますが、Javascriptでは実行しません。

+0

私はこれを試しました:try {$ user = $ facebook-> getUser(); } catch(FacebookApiException $ e){echo $ e;} }エラーを表示せず(空白のページ)、自分自身をリロード...:S – VORiAND

+0

URLとは何ですか?もっと多くの手がかりを与えるためにFacebookのコールを接続して監視しようとすることができます。 – Robbie

関連する問題