Я недавно обновил свой код для использования FB android SDK 3.0. Мое приложение имеет четыре действия и НЕ использует фрагменты. Странно мой код работает без проблем на android 2.3.4. Но в android 4.0.4 состояние сеанса всегда «ОТКРЫТИЕ». Я использую UiLifeCycleHelper, а ниже - код в активности запуска.Facebook android sdk 3.0 ошибка входа
SharedPreferences mPrefs;
String access_token = mPrefs.getString("access_token", null);
Session currentSession = Session.getActiveSession();
if(currentSession == null || currentSession.getState().isClosed())
{
if(access_token!=null)
{
SharedPreferences.Editor editor = mPrefs.edit();
//One time upgrade from FB SDK 2.0 to 3.0
editor.putString("access_token", null);
editor.commit();
AccessToken new_access_token = AccessToken.createFromExistingAccessToken(access_token, null, null, null, null);
currentSession.open(new_access_token, myCallback);
Session.setActiveSession(currentSession);
}
else
{
Session.openActiveSession(this, true, myCallback);
}
}
else if (!currentSession.isOpened())
{
OpenRequest openRequest = new OpenRequest(this).setCallback(myCallback);
openRequest.setDefaultAudience(SessionDefaultAudience.FRIENDS);
openRequest.setPermissions(Arrays.asList(permissions));
openRequest.setLoginBehavior(SessionLoginBehavior.SSO_WITH_FALLBACK);
currentSession.openForRead(openRequest);
}
else if(currentSession.isOpened())
{
handleRequest(currentSession);
}
StatusCallback myCallback = new StatusCallback()
{
@Override
public void call(Session session, SessionState state, Exception exception)
{
handleRequest(session);
}
};
public void handleRequest(Session activeSession)
{
Request new_request = new Request(activeSession, "/me/friends", null, null, new Callback()
{
@Override
public void onCompleted(Response response)
{
//Process the response and make UI changes.
}
});
}
Сначала я подозревал, что проблема возникла из-за старой версии приложения Facebook (1.9). Поэтому я обновился до последней версии (3.2). Тем не менее проблема остается на Android 4.0.4.
Вот мой код в onActivityResult обратного вызова
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data)
{
super.onActivityResult(requestCode, resultCode, data);
Session.getActiveSession().onActivityResult(this, requestCode, resultCode, data);
uihelper.onActivityResult(requestCode, resultCode, data);
}
Есть ли что-нибудь не так?
См. Мое редактирование. Я рассмотрел вопрос, который вы упомянули. Я использую ListActivity вместо Activity. Это проблема? –