我正在尝试使用Facebook JavaScript SDK向用户朋友发送“app”邀请。 点击Facebook按钮时,这是一个模板事件:
"click #fb": function (e, tmp) {
Meteor.loginWithFacebook({
requestPermissions: ['user_likes',
'friends_about_me',
'user_birthday',
'email',
'user_location',
'user_work_history',
'read_friendlists',
'friends_groups',
'user_groups']
}, function (err) {
if (err) {
console.log("error when login with facebook " + err);
} else {
FB.api('/' + Meteor.user().services.facebook.id + '/friends', { fields: 'name,picture' }, function (response) {
if (response && response.data) {
friends = response.data;
friends_dep.changed();
}
});
}
});
}
之后我希望用户邀请别人加入我的应用,我的代码看起来像这样(另一个模板事件):
FB.ui({method: 'apprequests',
message: 'My Great Request'
}, function(response) {
if (response && response.post_id) {
alert('Post was published.');
} else {
alert('Post was not published.');
}
}
);
它正在发挥作用。有一个Facebook对话框与所有用户朋友,但在尝试发送消息时,我得到响应错误='帖子未发布。
我在这里做错了什么?
基本上用户可以建立一个组 - 我希望用户能够邀请他的Facebook朋友加入该组。无论如何,在发送请求时,reciver只会按“是”并自动添加到发件人组中?
注意我正在使用我的本地计算机aka localhost:3000
答案 0 :(得分:3)
你可以尝试删除&&来自if语句的response.post_id部分?
根据请求对话框的Facebook API文档:https://developers.facebook.com/docs/reference/dialogs/requests/,响应将只有'请求'和'到'数据。看起来你已经从他们为帖子对话框提供的示例中复制并粘贴了你的回调。如果在删除之后仍然出现错误,那么您没有得到响应,我不确定JS SDK如何处理响应。如果你可以使用js sdk让其他API调用工作,那么我真的不确定。
我最近使用Facebook API并选择不使用JS SDK,因为它似乎与使用accounts-facebook软件包不一致。我很好奇你是否也在使用它。
一些Facebook API调用,如创建Post(可能还有这个)确实需要一个对话框,我将概述如何在不使用JS SDK的情况下解决这个问题,以防它或其他任何人帮助你。我只是形成URL客户端并打开一个弹出窗口,例如这是我处理发帖的方式:
'click .send-message': function() {
var recipient = this.facebook_id;
var config = Accounts.loginServiceConfiguration.findOne({service: 'facebook'});
var url = "http://www.facebook.com/dialog/feed?app_id=" + config.appId +
"&display=popup&to=" + recipient + "&redirect_uri=" + Meteor.absoluteUrl('_fb?close');
window.open(url, "Create Post", "height=240,width=450,left=100,top=100");
}
然后获取响应服务器端:
WebApp.connectHandlers
.use(connect.query())
.use(function(req, res, next) {
if(typeof(Fiber)=="undefined") Fiber = Npm.require('fibers');
Fiber(function() {
try {
var barePath = req.url.substring(0, req.url.indexOf('?'));
var splitPath = barePath.split('/');
if (splitPath[1] !== '_fb') {
return next();
}
if (req.query.post_id) {
//process it here
}
res.writeHead(200, {'Content-Type': 'text/html'});
var content = '<html><head><script>window.close()</script></head></html>';
res.end(content, 'utf-8');
} catch (err) {
}
}).run();
});
此代码与打开登录弹出窗口并侦听响应时oauth包中使用的代码非常相似。