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 - это функция, которая будет сохранять пользовательские данные в общих предпочтениях.
Есть ли что-то не так? Функция работает в некоторых действиях, но не во всех действиях.
Спасибо
Ответы
Ответ 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, также будет вызвано тем, что методы обратного вызова не запускаются.