Facebook发送对话框如何识别用户是点击了发送还是取消按钮?

5
我正在使用Facebook发送对话框向朋友发送消息。如此文档中所述: https://developers.facebook.com/docs/reference/dialogs/send/,并使用类似于Facebook示例中的链接: https://www.facebook.com/dialog/send?app_id=123050457758183&name=People%20Argue%20Just%20to%20Win&link=http://www.nytimes.com/2011/06/15/arts/people-argue-just-to-win-scholars-assert.html&redirect_uri=http://www.example.com/response 在我指定为redirect_uri的页面上,我显示了文本:“您的消息已发送”。但是我意识到,即使您在Facebook对话框中单击“取消”,您也会看到此页面。
有没有办法确定是否单击了保存取消
更新:我已经找到了一种解决我当前问题的FB.ui方法的解决方法。 我仍然希望知道是否有更好的解决方案,使用上面的发送对话框链接。
2个回答

8
我已经找到了一个解决方法,通过使用Facebook的JavaScript SDK中的FB.ui方法来实现。
      FB.ui({
          method: 'send',
          name: 'People Argue Just to Win',
          link: 'http://www.nytimes.com/2011/06/15/arts/people-argue-just-to-win-scholars-assert.html,
          display: 'popup'
          });

注意:为使此功能正常工作,必须将显示设置为弹出窗口!

由于不需要redirect_uri,所以无需知道用户是否单击了保存或取消按钮。但是,如果您确实想知道这一点,可以访问响应对象:

      FB.ui({
          method: 'send',
          name: 'People Argue Just to Win',
          link: 'http://www.nytimes.com/2011/06/15/arts/people-argue-just-to-win-scholars-assert.html,
          display: 'popup'
          },
          function(response) {
              if (response){
                  // save has been clicked
              } else {
                  // cancel has been clicked
              }
          });

响应对象没有提供有关用户是否继续发送或取消的任何信息。我卡在同一个位置。 - Abhinav Gujjar
@AbhinavGujjar - 请看下面Pontus Hymer的回答。我会更新我的回答以包含他的发现。 - Andy
好的,至少对于“分享”操作似乎不适用。它返回一个非空对象来取消和发布。我已经在这里开了一个不同的线程-https://dev59.com/AYDaa4cB1Zd3GeqP_RCJ - Abhinav Gujjar
我认为由于“分享”操作是可以被撤销的(用户只需删除帖子即可),API 可能故意不提供取消和分享之间的状态区分器。另一个解释是他们这样做是为了防止其他网站将其用作通往其他功能的入口,并强迫人们将某些内容发布为状态更新。 - Abhinav Gujjar
@Andy,请帮忙 https://stackoverflow.com/questions/66654709/facebook-sdk-send-method-in-reactjs - Asking

5

对安迪的回答进行补充: 实际上,响应对象并没有提供关于发送了什么的详细信息(在控制台中返回 []),但是响应对象的存在表明“发送”按钮已被按下。

FB.ui(obj, function (param) {
if (param) {
// The "SEND" button has been pressed
}
else{
// The "Cancel" button has been pressed
}

有人知道这里如何报告错误吗?例如,如果用户确实点击了“分享”,但遇到错误,例如Facebook权限不足或网络超时,响应对象将如何填充? - Shiprack

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接