Проблемы с реализацией диалога выбора друзей в Facebook с использованием PHP SDK - PullRequest
1 голос
/ 15 декабря 2011

Я пытаюсь понять, как правильно реализовать диалог выбора друзей для запросов приложений.

Я стремлюсь к тому, чтобы, как только пользователь вошел в мое соревновательное приложение, если он не выиграл, онЯ могу отправить запрос 5 друзьям, и тогда они получат еще один шанс войти.

Я понятия не имею, возможно ли добиться принудительного выбора как минимум 5 друзей, но логика для контроля, могут ли ониввод или нет будут контролироваться некоторыми данными, хранящимися в базе данных, т. е. после отправки запроса обновите базу данных, чтобы разрешить их повторный ввод.

Я следовал коду в этом вопросе:

Как отобразить диалоговое окно выбора друзей с помощью PHP SDK для Facebook?

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

$user = $facebook->getUser();

$url = 'https://www.facebook.com/dialog/';
$url .= 'apprequests?app_id=XXXXXXXXXX&redirect_uri=http://www.domain.com/';
$url .= '&message=Share%20with%205%20friends%20for%20another%20chance%20to%20win!&display=popup';
?>
<a href="<?php echo $url; ?>">Recommend friends for another chance to win!</a>

<?php

echo $_GET['request_ids'];

if (isset($_GET['request_ids'])) {
    for ($i=0; $i<count(request_ids); $i++){
        $link = ($link + "&to=" + $request_ids[$i]);
    }
    echo "<script language=javascript>parent.location=''</script>";
}

Проблемы, с которыми я сталкиваюсь, заключаются в том, что при нажатии на ссылку появляется логотип Facebook сперейдите на facebook.com внизу.Когда я нажимаю на это, диалог открывается на полной странице.

Если я нажимаю кнопку отмены, я перехожу на свой домен, но не могу перенаправить на вкладку?

Аналогично, если я завершудиалог запроса приложения Я перенаправлен на свою домашнюю страницу, когда я бы предпочел перенаправить на вкладку.

Трудно разобраться в этом, поэтому помощь будет принята с благодарностью.

Подводя итог, я хотел бы, чтобы диалог открывался во всплывающем окне, а не внезапно появлялся логотип Facebook, а затем открывался диалог на странице.

Затем, если пользователь нажимает кнопку «Отмена», чтобы диалогпросто закройте и, если запрос завершен, диалоговое окно снова закроется, оставив вкладку вместо диалога, являющегося полной страницей, и перенаправьте на мой домен.

Спасибо.

1 Ответ

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

Использование Facebook JS-SDK обеспечит наилучшие впечатления, о которых вы просите. Если это вариант (не могу понять, почему это не так), вам следует использовать диалог Запросы :

<html xmlns="http://www.w3.org/1999/xhtml"
  xmlns:fb="https://www.facebook.com/2008/fbml">
  <head>
    <title>Request Tester C</title>
  </head>

  <body>
    <div id="fb-root"></div>
    <script src="http://connect.facebook.net/en_US/all.js"></script>
    <p>
      <input type="button"
        onclick="sendRequestToRecipients(); return false;"
        value="Send Request to Users Directly"
      />
      <input type="text" value="User ID" name="user_ids" />
      </p>
    <p>
    <input type="button"
      onclick="sendRequestViaMultiFriendSelector(); return false;"
      value="Send Request to Many Users with MFS"
    />
    </p>

    <script>
      FB.init({
        appId  : 'YOUR_APP_ID',
        status : true,
        cookie : true,
        oauth: true
      });

      function sendRequestToRecipients() {
        var user_ids = document.getElementsByName("user_ids")[0].value;
        FB.ui({method: 'apprequests',
          message: 'My Great Request',
          to: user_ids, 
        }, requestCallback);
      }

      function sendRequestViaMultiFriendSelector() {
        FB.ui({method: 'apprequests',
          message: 'My Great Request'
        }, requestCallback);
      }

      function requestCallback(response) {
        // Handle callback here
      }
    </script>
  </body>
</html>

Как обрабатывать отправленные запросы также описано в документации, а также в моем руководстве; ниже приведен пример обработки обратного вызова с новым форматом запросов (я использую jQuery):

function sendRequest() {
    FB.ui({
        method: 'apprequests',
        message: 'I want to give you this flower!',
        title: 'Give a flower to some of your friends',
        data: '{"item_id":1254,"item_type":"plant"}'
    },
    function (response) {
        if (response.request && response.to) {
            var request_ids = [];
            for(i=0; i<response.to.length; i++) {
                var temp = response.request + '_' + response.to[i];
                request_ids.push(temp);
            }
            var requests = request_ids.join(',');
            $.post('handle_requests.php',{uid: <?php echo $user; ?>, request_ids: requests},function(resp) {
                // callback after storing the requests
            });
        } else {
            alert('canceled');
        }
    });
    return false;
}

ОБНОВЛЕНИЕ: Что касается «минимального» количества друзей. В диалоговом окне JS-SDK есть свойство max_recipients, но оно не минимально, поэтому вам нужно иметь собственный селектор друзей, а затем установить свойство to для идентификаторов этих друзей.

...