Android Facebook共享对话框PostId为空

Android Facebook共享对话框PostId为空,android,facebook,facebook-sharer,Android,Facebook,Facebook Sharer,我通过Android中的共享对话框在FB上共享视频。共享工作非常好。但是,FB post id返回null。即使在上传视频之前,回调也会返回。如果我遗漏了什么,请告诉我。下面是我的代码 public class TestFragment extends Fragment { private CallbackManager callbackManager; private ShareDialog shareDialog; public TestFragment() {

我通过Android中的共享对话框在FB上共享视频。共享工作非常好。但是,FB post id返回null。即使在上传视频之前,回调也会返回。如果我遗漏了什么,请告诉我。下面是我的代码

public class TestFragment extends Fragment {

    private CallbackManager callbackManager;
    private ShareDialog shareDialog;

    public TestFragment() {
        // Required empty public constructor
    }

    public static TestFragment newInstance(String path, String json) {
        TestFragment fragment = new TestFragment();
        return fragment;
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        FacebookSdk.sdkInitialize(getActivity());
        callbackManager = CallbackManager.Factory.create();
        shareDialog = new ShareDialog(this);
        // this part is optional
        shareDialog.registerCallback(callbackManager, new FacebookCallback<Sharer.Result>() {
            @Override
            public void onSuccess(Sharer.Result result) {
                Timber.d("result.getPostId() :: " + result.getPostId());
            }

            @Override
            public void onCancel() {
                Timber.d("Facebook : Cancelled");
            }

            @Override
            public void onError(FacebookException e) {
                Timber.d(e.getMessage());
            }
        });
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_test, container, false);
        ButterKnife.inject(this, view);
        return view;
    }

    @OnClick(R.id.facebookShare)
    public void share() {
        Timber.d("share button pressed");
        if (ShareDialog.canShow(ShareVideoContent.class)) {
            Timber.d("showing share dialog");
            shareDialog.show(getVideoContent());
        } else {
            Timber.d("unable to show the share dialog");
        }
    }

    private ShareVideoContent getVideoContent() {
        Timber.d(mVideoMetadata.getVideoId());

        ShareVideo shareVideo = new ShareVideo.Builder()
                .setLocalUrl(Uri.parse("... file ..."))
                .build();
        ShareVideoContent content = new ShareVideoContent.Builder()
                .setVideo(shareVideo)
                .build();

        return content;
    }

    @Override
    public void onActivityResult(final int requestCode, final int resultCode, final Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        callbackManager.onActivityResult(requestCode, resultCode, data);
    }
}
公共类TestFragment扩展了片段{
私人CallbackManager CallbackManager;
私有共享对话框;
公共测试片段(){
//必需的空公共构造函数
}
公共静态TestFragment newInstance(字符串路径,字符串json){
TestFragment fragment=新的TestFragment();
返回片段;
}
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
sdkinInitialize(getActivity());
callbackManager=callbackManager.Factory.create();
shareDialog=新建shareDialog(此);
//这部分是可选的
registerCallback(callbackManager,newfacebookcallback()){
@凌驾
成功时公开作废(共享结果){
d(“result.getPostId():”+result.getPostId());
}
@凌驾
公开作废{
Timber.d(“Facebook:取消”);
}
@凌驾
公共无效onError(FaceBook例外e){
Timber.d(e.getMessage());
}
});
}
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
视图=充气机。充气(R.layout.fragment_测试,容器,错误);
注入(这个,视图);
返回视图;
}
@OnClick(R.id.facebookShare)
公开股{
Timber.d(“按下共享按钮”);
if(ShareDialog.canShow(ShareVideoContent.class)){
Timber.d(“显示共享对话框”);
show(getVideoContent());
}否则{
Timber.d(“无法显示共享对话框”);
}
}
私有共享视频内容getVideoContent(){
d(mvideomedata.getVideoId());
ShareVideo ShareVideo=新建ShareVideo.Builder()
.setLocalUrl(Uri.parse(“…文件…”))
.build();
ShareVideoContent=新的ShareVideoContent.Builder()
.setVideo(共享视频)
.build();
返回内容;
}
@凌驾
ActivityResult上的公共void(最终int请求代码、最终int结果代码、最终意图数据){
super.onActivityResult(请求代码、结果代码、数据);
callbackManager.onActivityResult(请求代码、结果代码、数据);
}
}
shareDialog.show(shareContent,shareDialog.Mode.FEED)

将模式设置为ShareDialog.mode.FEED
这对我有用


当使用Facebook成功登录时,请调用此方法 shareOnFacebook()

私有void shareOnFacebook(){

ShareLinkContent shareContent=new ShareLinkContent.Builder()
.setContentTitle(“辛普森!”)
.setContentUrl(Uri.parse(“http://www.codecube.in/airbucks-project"))
.build();
mFacebookShareDialog.show(shareContent,ShareDialog.Mode.FEED);
mFacebookShareDialog.registerCallback(this.callbackManager,new FacebookCallback()){
@凌驾
成功时公开作废(共享结果){
Log.v(“MyApp”,“共享成功!”);//如果按共享或取消按钮,则显示
字符串postID=result.getPostId();
Log.v(“MyApp”,“共享成功!”+result.getPostId());
}
@凌驾
公开作废{
Log.v(“MyApp”,“共享已取消”);//仅在我按下关闭按钮时显示
}
@凌驾
公共无效onError(FaceBook例外e){
Log.v(“MyApp”,“共享错误:+e.toString());
}    
});
mFacebookShareDialog.show(shareContent,ShareDialog.Mode.FEED);
}
@凌驾
受保护的void onActivityResult(最终int请求代码、最终int结果代码、最终意图数据){
super.onActivityResult(请求代码、结果代码、数据);
callbackManager.onActivityResult(请求代码、结果代码、数据);
}

当前面临同样的问题只有当你的应用程序实现Facebook登录并请求“发布操作”权限时,才会返回帖子ID。这是您的应用程序请求的吗?@subeeshb感谢您提供此指针。目前,我还没有实现FB登录。我会更新一次,我实现了FB login.mukeikh,你解决问题了吗?它需要FB登录才能访问该功能。
    ShareLinkContent shareContent = new ShareLinkContent.Builder()
            .setContentTitle("The Simpson!")
            .setContentUrl(Uri.parse("http://www.codecube.in/airbucks-project"))
            .build();

    mFacebookShareDialog.show(shareContent, ShareDialog.Mode.FEED);

    mFacebookShareDialog.registerCallback( this.callbackManager, 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
            String postID = result.getPostId();
            Log.v("MyApp", "Share success!" +result.getPostId());                        
        }
        @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());
        }    
    });
    mFacebookShareDialog.show(shareContent, ShareDialog.Mode.FEED);
}


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