wake-up-neo.com

Das Teilen eines Rückrufs funktioniert nicht mit Facebook SDK 4 Android

Ich habe kürzlich meine App auf FB SDK 4.0 umgestellt und habe einige seltsame Probleme beim Teilen. Der Austauschdialog funktioniert hervorragend - ich kann ihn sowohl mit der Facebook-App als auch mit WebDialog teilen. Nach erfolgreicher/fehlgeschlagener Freigabe funktioniert mein Rückruf jedoch überhaupt nicht. Ich kann also nicht einmal einen Toast anzeigen oder etwas aufzeichnen. So mache ich es:

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

Ich habe sogar versucht, die App zu debuggen - kein Effekt - dieser Code wurde nicht einmal aufgerufen.

Könnten Sie mich also darauf hinweisen, was ich falsch mache oder was ich vermisse?

Update

Da ich eine spezielle Klasse für die Arbeit mit FB SDK benutze, ist hier der Teil davon:

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

Und hier, wie es in Fragmenten aussieht:

 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);
}
13
Paul Freez

Sie müssen die onActivityResult-Methode überschreiben. Aktualisieren Sie Ihre Methode wie folgt:

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

sie müssen A requestCode angeben, wenn Sie einen Facebook-Rückruf registrieren. shareDialog.registerCallback(**, **, requestCode);

1
Lincoln

Vergiss nicht zu überschreiben:

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

Wenn Sie in Fragment verwenden, müssen Sie außerdem Folgendes hinzufügen:

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

Stellen Sie sicher, dass Sie das Fragment übergeben (anstatt die Aktivität zu übergeben), wenn Sie den ShareDialog erstellen:

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

Dann können Sie die facebookCallbackManager.onActivityResult() in der onActivityResult() -Methode Ihres Fragments belassen.

0
mVck