2011-12-08 5 views
0

Facebookのカスタムタブを作成しようとしていますが、ページのタブと直接リンクの両方でfirefox、chrome、Internet Explorer 8で完全に動作しますが、彼らのような。アプリはサンドボックスモードでないFacebookファンガードされたページは誰も拾わない

require 'src/facebook.php'; 

// Create our Application instance (replace this with your appId and secret). 
$facebook = new Facebook(array(
    'appId' => 'xxxxxxxx', 
    'secret' => 'xxxxxx', 
)); 

$user = $facebook->getUser(); 


// alternative to the below but only works on the facebook tab itself 
$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"])) { 
echo "You are not a fan!"; 
} else { 
echo "Welcome back fan!"; 
} 

if ($user) { 
try { 
    $likes = $facebook->api("/me/likes/xxxxxxxxxx"); 
    if(!empty($likes['data'])) 
    { 
     ?> 
     <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script> 
     <script type="text/javascript"> 
     $(document).ready(function() { 
      $('#fan').click(function() { 
       $('#fan').animate({ 
        opacity: 0.2, 
        width: 'auto', 
        height: 'auto' 
       }, 1000, function() { 
        // Animation complete. 
        $('#fan').hide('slow'); 
        $('#voucher').show('slow'); 
       }); 
      }); 
     }); 
     </script> 

     <a href="#"><img id="fan" src="//www.website.com/facebook/2011/voucher/fans_image.jpg" alt="10% off" style="border:0;" /></a> 
     <div style="display:none; position:absolute; top:0; left:0;" id="voucher" > 
     <a href="//www.website.com/facebook/2011/voucher/EYE-TEST-DECEMBER-11.pdf" target="_blank"><img src="//www.website.com/facebook/2011/voucher/fb-voucher-dec11.jpg" style="border:0;" alt="10% off" /></a> <br /> 
     <p style="text-align:center"><a href="//www.website.com/facebook/2011/voucher/EYE-TEST-DECEMBER-11.pdf" target="_blank">Click here to download PDF version of the voucher.</a></p> 
     </div> 
     <?php 
    } 
    else 
    { 
     ?> 
     <img style="position:absolute; top:0; left:0; border:0;" id="all" src="//www.website.com/facebook/2011/voucher/fb_like_page.jpg" width="520" height="304" alt="Click LIKE button to get 10% off." /> 
     <?php 
    } 
} catch (FacebookApiException $e) { 
    error_log($e); 
    $user = null; 
    } 
} 

if ($user) { 
    $logoutUrl = $facebook->getLogoutUrl(); 
} 
else { 
    //user isn't logged in so just show un-liked image 
    ?> 
    <img style="position:absolute; top:0; left:0; border:0;" id="all" src="//www.website.com/facebook/2011/voucher/fb_like_page.jpg" width="520" height="304" alt="Click LIKE button to get 10% off." /> 
    <?php 
    $loginUrl = $facebook->getLoginUrl(array(
     'scope' => 'user_likes' 
    )); 
} 

詳細 :ここ

は私のコードです。

私のアカウント設定にはアプリが表示されているだけなので、それは私にとってはうまくいっていますが、他のファンタイテッドタブを見ると権限通知ポップアップが表示されないので、その場合ですか?

答えて

1

あなたが行ったように見えるアプリケーションを明示的に承認する人々のための通知です。あなたがいないか、あなたのページ

// alternative to the below but only works on the facebook tab itself 
$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"])) { 
    echo "You are not a fan!"; 
    } else { 
    echo "Welcome back fan!"; 
    } 

ここにコードを気に入っていない人々に、持っているし、あなたのアプリケーションを許可していない人々に情報を示していることは「私は好きか着る人のために期待するものですページタブのように。これは、そのタブ上にあるアプリケーションを許可することとは関係ありません。ユーザーが自分のページを好きなときには、自分のユーザーIDなどにアクセスすることはできません。しかし、あなたのコードは、ユーザーがページを気に入っているかどうかをテストするためにapiを使用しているようです。私の推測では、ユーザーがそのページ・タブでアプリケーションを明示的に許可していないので、ユーザー・オブジェクトは実際にはヌルです。それは理にかなっていますか?だから、

彼らは、アプリへのアクセスを許可していない限り:

if ($user) { 
$logoutUrl = $facebook->getLogoutUrl(); 
} 
else { 
//user isn't logged in so just show un-liked image 
?> 
<img style="position:absolute; top:0; left:0; border:0;" id="all" src="//www.website.com/facebook/2011/voucher/fb_like_page.jpg" width="520" height="304" alt="Click LIKE button to get 10% off." /> 
<?php 
$loginUrl = $facebook->getLoginUrl(array(
    'scope' => 'user_likes' 
)); 
} 

$ユーザは、ここではnullになり、あなたは彼らが持っているかどうか、あなたのページを好きに人々に伝えることになるか、そう

+0

を行っていませんありがとう、アクセス許可を必要としないファンゲートのタブを持つ方法はありません(おそらくFBMLを使用することができますが、iframeを代わりに使用することはできません)。その場合、なぜ私のアプリは 'user_likes'パーミッションを要求しませんか? – martincarlin87

+0

あなたはファンゲートのページを持つことができますが、ユーザーが誰であるかを知らずに好きかどうかを調べます。 2番目のコードは、ユーザーが誰であるかを知り、アプリケーションを許可する必要があります。 $ 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"])){ echo "あなたはファンではありません! } else { echo "ようこそファン!"; } 私はvar_dump($ data)を実行します。ここでこれは "好きな"情報を持っているはずです – TommyBs

+0

tommyに感謝します、私は '$ _REQUEST'だけで試してみます - しかし、タブのフレームのソースを見ると、私はまだ 'あなたはファン!'私はまだこれが動作するかどうかは分かりません。 – martincarlin87

関連する問題