Подтвердить что ты не робот

Android facebook sdk не вызывает обратный вызов после входа в систему

Справка

Я пытаюсь создать класс, который обрабатывает логин facebook в моем приложении. Моя проблема заключается в том, что он не работает во всех видах деятельности. В этом случае он не вызывает обратный вызов. После того, как веб-просмотр приложения для входа и авторизации отключен, обратный вызов не запускается. последнее состояние, которое напечатано в Logcat, ОТКРЫТИЕ

Вот мой код:

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 - это функция, которая будет сохранять пользовательские данные в общих предпочтениях.

Есть ли что-то не так? Функция работает в некоторых действиях, но не во всех действиях.

Спасибо

4b9b3361

Ответ 1

Возможно, вы забыли обработать результаты после входа в систему...

проверить метод переопределения onActivityResult..

потому что он возвращает результаты обратно в MainActivity,

возможно, это может помочь вашей проблеме.

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

Обновление 1

Для нового SDK используйте:

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

Ответ 2

Наличие атрибута android:noHistory="true", установленного для вашей активности обратного вызова в файле AndroidManifest.xml, также будет вызвано тем, что методы обратного вызова не запускаются.