让用户在Feed对话框中指定收件人

时间:2012-11-06 22:03:34

标签: facebook dialog feed

目前,我们的应用程序通过Graph API发布到用户的朋友的墙上。但是,Facebook正在弃用此功能,因此我们将根据Facebook的推荐迁移到Feed对话框(请参阅2013年2月6日的https://developers.facebook.com/roadmap/部分)。

现在,我们知道我们可以将收件人指定为Javascript SDK调用的一部分(注意FB.init()在页面前面的其他位置调用):

<p><a onclick="launchFeedDialog(); return false">Testing the Feed Dialog</a></p>
<script>
function launchFeedDialog() {

    // calling the API ...
    var obj = {
      method: 'feed',
      to: 'RECIPIENT NAME', // Can specify recipient here
      link: 'http://example.com',
      name: 'Test post',
      description: 'Test description'
    };

    FB.ui(obj);
}
</script>

但是,用户似乎不能在启动的对话框中修改收件人。我的意思的截图是http://i.imgur.com/oLPTO.png

是否有某种方法可以调用Feed对话框,以便用户可以更改/添加收件人,例如发送对话框?

我们尝试实施的流程(以及目前的方式)是:

  1. 用户点击按钮以启动Feed对话框
  2. 用户填写Feed对话框(包括收件人)并提交
  3. 现在,我们陷入了这种尴尬的流程:

    1. 用户填写指定收件人的自定义控件
    2. 用户点击按钮以启动Feed对话框
    3. 用户填写Feed对话框并提交

1 个答案:

答案 0 :(得分:0)

好的,我们找到了解决方法。总体思路:

  1. 将Feed对话框内联显示为iframe(通过指定display=iframe
  2. 创建自己的自定义控件以选择收件人Facebook用户名或ID
  3. 选择收件人或onblur等时异步重新加载iframe
  4. 上面的一些警告/推理:

    • 您无法使用JS SDK,因为它会将Feed对话框的iframe版本作为模式灯箱启动(而不是在页面流中嵌入)
    • 您需要实现一个可以进行后期处理的重定向页面,例如更新父窗口的状态,记录结果等。
    • 对于(2),自定义控件可以像文本输入字段一样简单,但您可能至少需要某种自动完成。这实际上并不太棘手,因为您使用https://graph.facebook.com/me/friends Graph API调用来获取用户的好友列表。

    以下是使用简单文本输入的基本示例:

    <html>
    <head>
    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
    </head>
    <body>
    <div>
      Recipient's FB username:
      <input type="text" id="fb-recipient" placeholder="Recipient's FB username"></input>
      <input type="submit" id="fb-recipient-submit" value="Pick" />
    </div>
      <iframe id="fb-feed-dialog" width="586" height="330" frameborder="0" allowfullscreen></iframe>
    <script>
      $('#fb-recipient-submit').click(function(e){
        e.preventDefault();
        var feedUrl = 'https://www.facebook.com/dialog/feed?';
        feedUrl += 'display=iframe';
        feedUrl += '&app_id=' + 'YOUR_APP_ID';
        feedUrl += '&access_token=' + 'ACCESS_TOKEN';
        feedUrl += '&link=' + 'SHARE_LINK';
        feedUrl += '&redirect_uri=' + 'REDIRECT_URI';
        feedUrl += '&to=' + $('#fb-recipient').val();
        $('#fb-feed-dialog').attr( 'src', feedUrl );
      });
    </script>
    </body>
    </html>
    

    您可以在http://i.imgur.com/0jTM391.png

    找到更加充实的解决方案的屏幕截图