Веб-просмотр Facebook дважды используется в приложении для Android

54
4

Я тестирую свое приложение на устройстве, где приложение Facebook не установлено. Поэтому, когда я регистрируюсь в Facebook, открывается веб-просмотр. Странно, что когда я вставил свое имя пользователя и пароль, после нажатия ok, веб-просмотр снова открывается, и я снова должен ввести имя пользователя и пароль, и я могу войти в систему. Что может быть?

authButton.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View arg0) {

authButton.setVisibility(View.GONE);
logoutButton.setVisibility(View.VISIBLE);
// start Facebook Login
Session.openActiveSession(Login.this, true, new Session.StatusCallback() {
// callback when session changes state

SharedPreferences.Editor edit = pref.edit();
@Override
public void call(Session session, SessionState state,
Exception exception) {

if (session.isOpened()) {

accesstoken = session.getAccessToken();

edit.putString("fbtoken", accesstoken);

if (session.getExpirationDate()!= null)
edit.putLong("com.facebook.sdk.AccessTokenExpires", session.getExpirationDate().getTime());

Log.d("FACEBOOK", "LOGGED IN");

}
});

List<String> permissions = session.getPermissions();
if (!isSubsetOf(PERMISSIONS, permissions)) {
Session.NewPermissionsRequest newPermissionsRequest = new Session.NewPermissionsRequest(
Login.this, PERMISSIONS);
session.requestNewReadPermissions(newPermissionsRequest);

return;
}

// make request to the /me API
Request.newMeRequest(session, new GraphUserCallback() {

@Override
public void onCompleted(GraphUser user, Response response) {
Log.d("FACEBOOK", "onCompleted");

Log.d("",""+user);
try {

name=user.getName();
email=user.getProperty("email").toString();
location=(user.getLocation().getProperty("name").toString());

} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

Log.d("ID", user.getId());

}
}).executeAsync();
}

}

});

}
});

спросил(а) 2015-03-05T18:32:00+03:00 5 лет, 3 месяца назад
1
Решение
69

Я предполагаю, что вы сохраняете токен доступа в общий префикс, и для его сохранения на диске требуется некоторое время, если вы его не заставляете. Вы должны добавить

edit.putLong("com.facebook.sdk.AccessTokenExpires", ...);
edit.commit(); // <- this line

поэтому вы уверены, что для следующего звонка он будет доступен

ответил(а) 2015-03-17T11:26:00+03:00 5 лет, 3 месяца назад
38

У меня была такая же проблема в iOS, поэтому эта проблема может быть связана. Я решил это, удалив делегата после того, как получил первый ответ.

Таким образом, это может быть применимо в вашем примере:


Session.openActiveSession(Login.this, true, new Session.StatusCallback() {
// callback when session changes state
if (logoutButton.getVisibility() == View.VISIBLE) {
// Its visible so we end the callback
return;
}

SharedPreferences.Editor edit = pref.edit();

ответил(а) 2015-03-17T03:27:00+03:00 5 лет, 3 месяца назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема