【问题标题】:Problems Implementing Facebook Friends Selector Dialogue Using PHP SDK使用 PHP SDK 实现 Facebook 好友选择器对话框的问题
【发布时间】:2011-12-15 14:38:36
【问题描述】:

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

我的目标是,一旦用户进入我的比赛应用,如果他们没有获胜,他们可以选择向 5 个朋友发送请求,然后他们将有机会再次进入。

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

我按照这个问题的代码:

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 徽标然后在页面中打开对话。

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

谢谢。

【问题讨论】:

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


    【解决方案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。

    【讨论】:

    • 感谢易卜拉欣,非常感谢。我最终使用 JS SDK 让它工作,并添加了一些代码发布在每个被选中的朋友的墙上。 (从您在此处的其他答案之一中获得)。现在几乎完成了应用程序,但如果你在附近,我可能很快会再次需要你的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-31
    • 2011-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多