2015-05-04 103 views
9

我正在使用以下代码在Facebook上共享链接。当用户单击共享对话框界面上的取消时,有时会调用onSuccess()回调方法,而不是onCancel()。并获得职位ID null.Please帮助我出了什么问题?Android Facebook SDK 4.0.0共享回调无法正常工作

ShareButton btn; 
CallbackManager callbackManager; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    FacebookSdk.sdkInitialize(this); 
    callbackManager = CallbackManager.Factory.create(); 
    setContentView(R.layout.activity_share); 

    btn = (ShareButton) findViewById(R.id.btn_share); 

    btn.registerCallback(callbackManager, new FacebookCallback<Sharer.Result>() { 
     @Override 
     public void onSuccess(Sharer.Result result) { 
      Log.e("Tag","Successfully posted"); 
      Log.e("Post id",result.getPostId()); 
     } 

     @Override 
     public void onCancel() { 

      Log.e("Tag","Canceled by user"); 

     } 

     @Override 
     public void onError(FacebookException error) { 

      Log.e("Tag",error.getLocalizedMessage()); 
     } 
    }); 
    ShareLinkContent content = new ShareLinkContent.Builder() 
      .setContentUrl(Uri.parse("My Custom URL")) 
      .setContentTitle("Test") 
      .build(); 

    btn.setShareContent(content); 

} 

@Override 
protected void onActivityResult(final int requestCode, final int resultCode, final Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    callbackManager.onActivityResult(requestCode, resultCode, data); 
} 
+0

我遇到同样的问题。你能解决这个问题吗? – cjserio

+0

我也面临同样的问题。 – Shankar

+0

我也有同样的问题,无法找到解决方案。看起来像Android的Facebook SDK中的错误或文档中缺少的东西。 –

回答

3

嗯,也许我迟到了,但几周前我面临同样的问题。 我注意到的是,如果您在基于Web的共享对话框中按下取消,则会调用onSuccess()方法,但Share.Result对象包含空postId,因此只要用户通过检查按下取消或共享Share.Result响应。

我注意到的另一件事是,如果您与安装的本地应用程序共享内容,postId字段始终为空......所以您将不得不检查用户是否安装了应用程序来检查或不检查postId字段。

+0

我试过使用'PostId'来标识成功发布操作,但正如你所说当安装本地应用程序时'PostId'始终为空。在这种情况下,您是否有任何解决方案来检测取消? – agarwaen

+0

只需检查用户是否安装了Facebook软件包来执行一个或其他逻辑。 – ablanco

+0

当用户安装Facebook本地应用并通过单击对话框左上角的后退箭头按钮取消共享时,此解决方案失败,在这种情况下,再次调用onSuccess,并且postId为空。 – NecipAllef