共享回调不适用于Facebook SDK 4 Android

时间:2015-04-07 07:21:16

标签: android facebook-sdk-4.0 facebook-share

我最近将我的应用程序移到了FB SDK 4.0,并且在共享方面遇到了一些奇怪的麻烦。共享对话框效果很好 - 我可以与Facebook应用程序和WebDialog共享。但是,在成功/失败共享后,我的回调根本不起作用 - 所以我甚至无法显示祝酒或记录任何内容。 这是我的工作方式:

shareDialog.registerCallback(fbManager, new FacebookCallback<Sharer.Result>() {
            @Override
            public void onSuccess(Sharer.Result result) {
                // This doesn't work
                Toast.makeText(f.getActivity(), "You shared this post", Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onCancel() {
            }

            @Override
            public void onError(FacebookException e) {
                // This doesn't work
                e.printStackTrace();
            }
        });

我甚至试过调试应用程序 - 没有效果 - 这个代码甚至没有被调用。

那么你能指出我做错了什么或我错过了什么?

更新

由于我使用特殊类来处理FB SDK,所以这是其中的一部分:

private static CallbackManager fbManager;

public static CallbackManager init(Activity c) {
    if (!FacebookSdk.isInitialized()) {
        FacebookSdk.sdkInitialize(c);
    }

    return fbManager = CallbackManager.Factory.create();
}

 ...

 public static void share(final Fragment f, final String title, final String description, final String link) {
    ShareDialog shareDialog = new ShareDialog(f);
    shareDialog.registerCallback(fbManager, new FacebookCallback<Sharer.Result>() {
        @Override
        public void onSuccess(Sharer.Result result) {
            Toast.makeText(f.getActivity(), "You shared this post", Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onCancel() {
        }

        @Override
        public void onError(FacebookException e) {
            e.printStackTrace();
        }
    });
    shareDialog.show(f, composeContent(title, description, link));

以下是片段中的样子:

 private CallbackManager callbackManager;

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

    callbackManager = FacebookHelper.init(getActivity());
}

...

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

 private void publishStory() {
    FacebookHelper.share(this,
            "Title",
            getResources().getString(R.string.sharing_text),
            sharingLink);
}

4 个答案:

答案 0 :(得分:29)

你必须覆盖onActivityResult方法, 按如下方式更新您的方法,

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

答案 1 :(得分:1)

注册facebookcallback时需要指定一个requestCode。 shareDialog.registerCallback(**, **, requestCode);

答案 2 :(得分:1)

不要忘记覆盖:

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

如果在Fragment中使用,那么还必须添加:

loginBtn = (LoginButton) view.findViewById(R.id.fb_login_button);
loginBtn.setFragment(this);

答案 3 :(得分:0)

确保在创建ShareDialog时传递片段(而不是传递活动):

// From within a fragment
ShareDialog dialog = new ShareDialog(this);

然后,您可以将facebookCallbackManager.onActivityResult()保留在您的片段onActivityResult()方法中。