【问题标题】:Facebook share dialog PostId is nullFacebook 分享对话框 PostId 为空
【发布时间】:2015-08-07 15:49:19
【问题描述】:

我正在通过 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);
    }
}

【问题讨论】:

  • 目前面临同样的问题
  • 只有当您的应用实现 Facebook 登录并请求“publish_actions”权限时,才会返回帖子 ID。这是您的应用要求的吗?
  • @subeeshb 感谢您的指点。目前,我还没有实现FB登录。我会更新一次,我实现FB登录。
  • mukeikh,你的问题解决了吗?
  • 在访问该功能之前需要登录FB。

标签: android facebook facebook-sharer


【解决方案1】:

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

将模式设置为 ShareDialog.Mode.FEED。
它对我有用。

Here's example

【讨论】:

    【解决方案2】:

    Facebook登录成功后调用该方法 shareOnFacebook()

    private void shareOnFacebook(){

        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);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-31
      • 1970-01-01
      • 2015-06-13
      • 1970-01-01
      • 1970-01-01
      • 2013-05-31
      相关资源
      最近更新 更多