1

我試圖使用Facebook JavaScript SDK向用戶朋友發送「應用」邀請。 這裏是點擊Facebook的按鈕時,模板事件:使用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好友加入該組。無論如何,發送請求時,接收者只需按「是」,並且會自動添加到發件人組中?

注意到我用我的本地機器又名本地主機:3000

回答

3

你可以嘗試從if語句去掉& & response.post_id部分?

根據Facebook API文檔中的請求對話框:https://developers.facebook.com/docs/reference/dialogs/requests/,響應只會包含「請求」和「到」數據。看起來你已經從他們爲Posts對話框給出的例子中複製並粘貼回調。如果刪除後仍然出現錯誤,那麼您沒有得到響應,我不確定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包使用的代碼迴應。

+0

是的,你的權利,我沒有複製從facebook例子代碼,我已經刪除&& response.post_id,現在請求運行良好,但我怎麼處理響應(當接收器點擊「接受「按鈕)??正如我所提到的,我希望接收者通過點擊「接受」創建一個新用戶,如果這個用戶不是我的應用中的用戶,並且將新用戶添加到發件人邀請他的組中。 –

+0

我自己並沒有嘗試過使用FB API的這個特性,但是從閱讀文檔看起來它主要用於基於facebook.com本身構建的遊戲:「請求僅適用於Facebook.com或iOS和Android上的遊戲接受來自遊戲的請求將引導該人進入發送請求的應用程序的畫布頁面URL。「當收件人點擊接受請求時,您發送的請求是在哪裏發送的? – shambles

+0

是的,我已經讀過它,但它沒有意義,爲什麼只用於遊戲?如果我按下facebook上的「accpet」,它會直接給我我的應用程序。 (本地主機)。我想我需要找到其他方法來解決這個問題。 –