Facebook-страничка с фанатскими объявлениями никому не нравится, кроме моей? - PullRequest
0 голосов
/ 08 декабря 2011

Я пытаюсь создать настраиваемую вкладку для страницы facebook, и она отлично работает для меня в Firefox, Chrome и Internet Explorer 8 как на вкладке на странице, так и в качестве прямой ссылки, но для других она просто не выбирается до их как.

Вот мой код:

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 Ответ

1 голос
/ 08 декабря 2011

Уведомление о разрешениях предназначено для людей, явно разрешающих приложение, которое, как вы, похоже, и сделали. Вы показываете информацию людям, которые авторизовали ваше приложение и не авторизовали его, а не людям, которым ваша страница понравилась или не понравилась

 // 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!";
  }

Код здесь - это то, что я ожидаю от людей, которым нравится или не нравится вкладка страницы. Это не имеет никакого отношения к авторизации вашего приложения, расположенного на этой вкладке. Когда пользователю нравится ваша страница, вы не получаете доступ к его идентификатору и т. Д., Только если им нравится страница. Но ваш код, похоже, использует 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'
));
}

$ user здесь будет нулевым, и вы будете говорить людям, что им нравится ваша страница, независимо от того, сделали они это или нет

...