Android Facebook SDK - “共享”对话框不响应取消回调

时间:2015-05-31 17:25:19

标签: android facebook facebook-sdk-4.0

我在Android应用上使用Facebook sdk 4.0,我发现了这个问题:

- 当我分享一个帖子时,我可以看到facebook界面,我可以发布并完美取消它。我注册了回调,但是如果按下取消按钮,则不会调用onCancel回调,不发布帖子,而是调用onSuccess回调。但是,如果我触摸关闭按钮,一切正常。

这是我的代码:

 private void fbOnShare(){

    ShareLinkContent shareContent = new ShareLinkContent.Builder()
            .setContentTitle("The Simpson!")
            .setContentUrl(Uri.parse("http://www.foxplay.com/ar/show/6980-los-simpson?gclid=CPa-7N-y7MUCFYMSHwodNLYAKQ"))
            .build();


    this._btnShare = (ShareButton)findViewById(R.id.share_button);
    this._btnShare.setShareContent( shareContent );


    _btnShare.registerCallback( this._fbCallbackManager, new FacebookCallback<Sharer.Result>() {
        @Override
        public void onSuccess(Sharer.Result result) {

            Log.v("MyApp", "Share success!"); //Showed if I press the share or the cancel button

        }

        @Override
        public void onCancel() {
            Log.v("MyApp", "Share canceled"); //Only showed when I press the close button
        }

        @Override
        public void onError(FacebookException e) {
            Log.v("MyApp","Share error: " + e.toString());
        }

    });
}

_fbCallbackManager是在另一个方法中创建的,该方法从活动中初始化onCreate方法中的所有内容。

http://imgur.com/VbMee31

&#34; Cancelar&#34;按钮仅响应onSuccess回调,尽管不发布共享内容。 &#34;关闭&#34;按钮工作正常。

2 个答案:

答案 0 :(得分:6)

根据THIS,它不是一个错误,它应该保持这种状态。

了解用户是否接受发布的唯一方法是检查结果的postID。

如果用户没有取消并且用户已登录到您的应用并且具有发布权限,那么您将只有一个postID。否则它将始终为空。

是的,我知道,很糟糕。

答案 1 :(得分:2)

private boolean hasPublishPermission()
    {
        AccessToken accessToken = AccessToken.getCurrentAccessToken();

        return accessToken != null && accessToken.getPermissions().contains("publish_actions");
    }

private void postStatusUpdate()
    {
        if(hasPublishPermission())
        {
            Log.d("PostStatus", "Ist");
            Profile profile = Profile.getCurrentProfile();
            ShareLinkContent linkContent = new ShareLinkContent.Builder()
            .setContentTitle("Hello Facebook")
            .setContentDescription( "The 'Hello Facebook' sample  showcases simple Facebook integration")
            .setContentUrl(Uri.parse("http://developers.facebook.com/docs/android"))
            .build();
            if(ShareDialog.canShow(ShareLinkContent.class))
            {
                Log.d("PostStatus", "2nd");
                ShareDialog shareDialog = new ShareDialog(instance);
                shareDialog.registerCallback(callbackManager, shareCallback);

            }
            else if (profile != null) 
            {
                Log.d("PostStatus", "3rdt");
                ShareApi.share(linkContent, shareCallback);
            } 
        }
        else
        {
            LoginManager.getInstance().logInWithPublishPermissions(this, Arrays.asList("publish_actions"));
        }

    }



private FacebookCallback<Sharer.Result> shareCallback = new FacebookCallback<Sharer.Result>()
                    {

                @Override
                public void onSuccess(Result result) {
                    // TODO Auto-generated method stub

                }

                @Override
                public void onError(FacebookException error) {
                    // TODO Auto-generated method stub

                }

                @Override
                public void onCancel() {
                    // TODO Auto-generated method stub

                }
                    };