web-dev-qa-db-fra.com

Android facebook sdk n'appelle pas de rappel après la connexion

Aidez-moi,

J'essaie de créer une classe qui gère la connexion Facebook dans mon application. Mon problème est qu'il ne fonctionne pas sur toutes les activités. Sur cette activité, il n'appelle pas le rappel. Une fois la connexion et l'autorisation webview d'application rejetées, le rappel ne se déclenche pas. le dernier état imprimé dans Logcat est OUVRANT

Voici mon code:

public void doLogin() {


        if ((Session.getActiveSession() == null || !Session.getActiveSession().isOpened())) {
            List<String> permissions = new ArrayList<String>();
            permissions.add("email");

            // start Facebook Login
            openActiveSession(activity, true, new Session.StatusCallback() {

                // callback when session changes state
                @Override
                public void call(Session session, SessionState state,
                        Exception exception) {

                    Log.d("Sessionstate", state.toString());
                    if (session.isOpened()) {
                        // make request to the /me API
                        Request.executeMeRequestAsync(session,
                                new Request.GraphUserCallback() {

                                    @Override
                                    public void onCompleted(GraphUser user,
                                            Response response) {
                                        if (prgCheckFB.isShowing())
                                            prgCheckFB.dismiss();
                                        if (user != null) {

                                            Log.e("facebookid", id);
                                            doSomething(user);



                                        }
                                    }
                                });

                    } 
                }, permissions); 
        }
    }



private static Session openActiveSession(Activity activity,
        boolean allowLoginUI, Session.StatusCallback callback,
        List<String> permissions) {
    Session.OpenRequest openRequest = new Session.OpenRequest(activity)
            .setPermissions(permissions).setCallback(callback);
    Session session = new Session.Builder(activity).build();
    if (SessionState.CREATED_TOKEN_LOADED.equals(session.getState())
            || allowLoginUI) {
        Session.setActiveSession(session);
        session.openForRead(openRequest);
        return session;
    }
    return null;
}

doSomething est une fonction qui enregistrera les données utilisateur dans une préférence partagée.

Y a-t-il quelque chose qui ne va pas? La fonction fonctionne dans certaines activités mais pas dans TOUTES les activités.

Je vous remercie

31
skaciw

vous oubliez peut-être de gérer les résultats après la connexion ...

vérifier la méthode de remplacement onActivityResult ..

car il gère les résultats vers la MainActivity,

peut-être que cela peut aider votre problème ..

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

mise à jour 1

Pour une utilisation plus récente du SDK:

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

Avoir l'attribut Android:noHistory="true" défini pour votre activité de rappel dans le fichier AndroidManifest.xml entraînera également le non-déclenchement des méthodes de rappel.

6
Unknown