13

最近、アプリを 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

4 に答える 4

31

onActivityResult メソッドをオーバーライドする必要があります。メソッドを次のように更新します。

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
  super.onActivityResult(requestCode, resultCode, data);
  callbackManager.onActivityResult(requestCode, resultCode, data);
}
于 2015-04-07T11:18:58.407 に答える
1

facebookcallback を登録するときに requestCode を指定する必要があります。shareDialog.registerCallback(**, **, requestCode);

于 2015-08-26T08:13:27.470 に答える