【问题标题】:Android Facebook SDK - Share dialog does not respond to cancel callbackAndroid Facebook SDK - 分享对话框不响应取消回调
【发布时间】:2015-05-31 17:25:18
【问题描述】:

我在我的 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

“取消”按钮仅响应 onSuccess 回调,尽管不发布分享内容。 “关闭”按钮工作正常。

【问题讨论】:

    标签: android facebook facebook-sdk-4.0


    【解决方案1】:

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

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

    只有当用户没有取消并且用户登录到您的应用并且它具有发布权限时,您才会有一个 postID。否则它将始终为空。

    是的,我知道,这很糟糕。

    【讨论】:

    • 因此,当您的意思是用户已登录您的应用并具有发布权限时,这是否意味着我需要在使用 Facebook 的 ShareButton 之前登录他们,或者它会在打开共享时执行此操作对话。我想知道我没有得到这个是因为我没有在开发者仪表板上完全设置我的应用程序,或者我是否需要在允许用户使用“ShareButton”之前登录用户。
    • 这取决于您如何实现 ShareButton。通常分享按钮只是分享任何东西到 Facebook,而不需要注册到你的应用程序。用户只需要登录 facebook。但是你可以在按钮上实现你需要的一切。激活按钮后,如果您有注册令牌,则将他发送到发布页面,如果没有,则开始登录到您的应用程序进程,并在结果后显示共享页面。 HTH
    • 好的,我认为使用 ShareButton 的部分原因是为了避免让用户登录您的应用程序,但听起来这限制了用户的功能。感谢您的回复,不幸的是这不是我想听到的。
    • 即使我的链接发布在 Fb 上,我使用 ShareDialog 得到的 postID 为空
    【解决方案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
    
                    }
                        };
    

    【讨论】:

    • accessToken.getPermissions() 总是返回 0。
    • @Dpedrinha accessToken.getPermissions().contains("publish_actions") 如果您已经获得此权限,则给出一个 true 条件,否则为 false
    • 抱歉,我忘记了问题只发生在同时使用 Parse 的人身上。但是无论如何,您的代码都无法按他的意愿工作。即使用户不分享应用程序想要的内容,它也会始终调用 onSuccess。请检查我的答案,如果我错了,请纠正我。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-07
    • 2015-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多