我正在尝试弄清楚如何正确实现应用请求的朋友选择器对话框。
我的目标是,一旦用户进入我的竞赛应用程序,如果他们没有赢,他们可以选择向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>
感谢。
答案 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。