使用PHP SDK实现Facebook好友选择器对话的问题

时间:2011-12-15 14:38:37

标签: php facebook facebook-graph-api facebook-php-sdk

我正在尝试弄清楚如何正确实现应用请求的朋友选择器对话框。

我的目标是,一旦用户进入我的竞赛应用程序,如果他们没有赢,他们可以选择向5位朋友发送请求,然后他们将有另一次机会进入。

我不知道是否可以强制执行至少5个朋友,但控制是否可以输入的逻辑将由存储在数据库中的某些数据控制,即一旦请求被发送,更新数据库允许他们重新进入。

我遵循了这个问题中的代码:

How to display the friends selector dialog with PHP sdk for 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徽标,然后在页面中打开对话框。

然后,如果用户单击“取消”以使对话简单地关闭,并且如果请求已完成,则对话框将再次关闭,将选项卡而不是对话框保留为整页并重定向到我的域。 / p>

感谢。

1 个答案:

答案 0 :(得分:1)

使用Facebook JS-SDK可以提供您所要求的最佳体验。如果这是一个选项(不能想到为什么它不会),那么你应该使用Requests Dialog

<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属性设置为这些朋友的ID。