Facebook MessageDialog回调无效

时间:2015-06-27 14:42:16

标签: android facebook messenger

我正在开发功能,通过Facebook Messenger应用程序将链接+内容发送给用户的Facebook好友。

首先,我使用facebook-android-sdk-4.3

并编写以下代码

callbackManager = CallbackManager.Factory.create();

messageDialog = new MessageDialog(this);
messageDialog.registerCallback(callbackManager, new FacebookCallback<Sharer.Result>() {
    @Override
    public void onSuccess(Sharer.Result result) {
        Log.e(TAG, "send success")
    }

    @Override
    public void onCancel() {
        Log.e(TAG, "send cancel")
    }

    @Override
    public void onError(FacebookException e) {
        Log.e(TAG, "send error")
    }
});

if (MessageDialog.canShow(ShareLinkContent.class)) {

  ShareLinkContent linkContent = new ShareLinkContent.Builder()
          .setContentTitle("....")
          .setContentDescription(message)
          .setContentUrl(....)
          .setImageUrl(Uri.parse(.....))
          .build();

  messageDialog.show(linkContent);
}

我覆盖了onActivityResult

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
  callbackManager.onActivityResult(requestCode, resultCode, data);
  super.onActivityResult(requestCode, resultCode, data);
}  

最后,我运行应用程序,按发送,打开发送消息对话框。 和

  • 我按发送消息onSuccess调用
  • 我按后退键取消,onSuccess也叫。 :((((

当用户按后退键关闭发送对话框时,如何捕获回调?

谢谢!

1 个答案:

答案 0 :(得分:0)

我认为这与用于在Feed上共享的ShareDialog发生的问题相同。当用户共享或取消对话时,我在onSuccess上收到回调,而postId始终为null!所以我无法区分2个结果。

经过一番研究,我发现了bug report。 Facebook团队回复了以下内容:

  

经过一些研究后,事实证明这种行为是设计的。 SDK重用FacebookCallback类来处理MessageDialog等对话框,但它使用onSuccess()方法来指示对话框的任何关闭。这意味着在实际发送消息时将调用onSuccess(),但也会在不发送消息的情况下解除对话框。

在我的情况下,这是解决方案:用户必须在登录过程中授予publish_actions权限才能触发onSuccess和onCancel。当帖子成功发布到Facebook时,也会返回postId。

我希望这能为你解决问题。