Post Id facebook share对话框在Android中始终返回null

Min*_*Văn 7 android facebook android-studio facebook-sdk-4.0

我使用测试应用程序ID并在测试用户登录在facebook开发网站上的dash_board app创建,在使用facebook sdk的登录按钮小部件登录时需要pulish_actions权限但结果获得postid always = null.这是我的代码:

....

shareDialog = new ShareDialog(MainActivity.this);
        shareDialog.registerCallback(callbackManager, new FacebookCallback<Sharer.Result>() {
            @Override
            public void onSuccess(Sharer.Result result) {
                if (result.getPostId() != null)
                    Log.e(TAG, result.getPostId());
        }

        @Override
        public void onCancel() {

        }

        @Override
        public void onError(FacebookException e) {

        }
    });

    pulishButton.setOnClickListener(this);
    try{
        loginButton.setPublishPermissions(new String[]{"publish_actions","publish_stream"});
    }catch (FacebookException e){
        e.printStackTrace();
    }

    loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
        @Override
        public void onSuccess(LoginResult loginResult) {
            Log.e(TAG, "success");
            loginButton.setEnabled(false);
            pulishButton.setEnabled(true);
            GraphRequest.newMeRequest(
                    loginResult.getAccessToken(), new GraphRequest.GraphJSONObjectCallback() {
                        @Override
                        public void onCompleted(JSONObject json, GraphResponse response) {
                            if (response.getError() != null) {
                                // handle error
                                System.out.println("ERROR");
                            } else {
                                System.out.println("Success");


                                } catch (JSONException e) {
                                    e.printStackTrace();
                                }
                            }
                        }

                    }).executeAsync();
        }

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

        @Override
        public void onError(FacebookException e) {
            Log.d(TAG, e.toString());
        }
    });
Run Code Online (Sandbox Code Playgroud)

小智 7

解决方案是强制ShareDialog使用Feed模式并避免使用FB的App进行共享:

shareDialog.show(linkContent, ShareDialog.Mode.FEED);
Run Code Online (Sandbox Code Playgroud)

我相信这是FB的一个错误.使用FB App进行共享时,它们不会将postId发送到onSuccess回调(postId = null),但如果使用Feed,则会执行.

我听说你可以通过使用Facebook登录并要求"publish_actions"权限来避免"postId = null"问题.但我不认为这是解决这个问题的正确方法.关于上述许可,Facebook声明:

通过对话框或社交插件发布不需要此权限.如果您只使用"共享"对话框,"订阅源"对话框,"消息对话框"等社交插件(例如"喜欢"按钮),请不要请求查看此权限.

Facebook关于分享对话的文档:

这不需要Facebook登录或任何扩展权限,因此这是在网络上启用共享的最简单方法.

  • 使用ShareDialog.Mode.FEED和SDK v4.5.0时,我收到以下错误:"无法通过Web或已安装的Facebook应用程序版本显示提供的内容.某些对话框仅支持启动API 14." (2认同)

小智 0

您不能直接使用“publish_action”登录,您必须首先使用任何读取权限登录,然后请求发布权限 https://developers.facebook.com/docs/facebook-login/permissions/v2.4#publishing