javascript - 在 Meteor 中使用 Facebook 请求对话

标签 javascript facebook-graph-api facebook-javascript-sdk meteor

我正在尝试使用 Facebook JavaScript SDK 向用户 friend 发送“应用程序”邀请。 这是单击 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.');
                }
            }
        );

它正在运行。有一个与所有用户 friend 的 Facebook 对话,但在尝试发送消息时,我收到响应错误 =“帖子未发布。”

我在这里做错了什么?

基本上用户可以建立一个群组——我希望用户能够邀请他的 facebook 好友加入该群组。无论如何,当发送请求时,接收者只需按"is"并自动添加到发送者组?

注意我使用的是我的本地机器,也就是 localhost:3000

最佳答案

您可以尝试从 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 调用,如创建帖子(可能还有这个)确实需要一个对话框,我将概述我是如何在不使用 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 包中使用的代码非常相似。

关于javascript - 在 Meteor 中使用 Facebook 请求对话,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19093290/

相关文章:

node.js - Facebook 与 NodeJS 连接

facebook - 如何使用 FB Graph API 从事件中获取出席人数?

使用数据对 PowerBuilder 进行 Javascript 事件回调

javascript - 如何轻松使用 svg 作为图标?

android - 在 android 中获取公共(public) facebook 页面提要和照片

iphone - Facebook UID 为 10 位数字而不是 9 位数字 UID

java - 首次尝试使用链接参数失败的 Facebook 发布

javascript - 请求对话框 - JavaScript 示例 - 在 Internet Explorer 中不起作用

javascript - JavaScript 中未调用函数

javascript - CSS。防止文本中的一行只包含一个词