Состояние: Android-устройство с встроенным Facebook apk установлено, но вышло из системы.
Каждый раз, когда это условие выполняется, и пользователь пытается войти с помощью Facebook LoginButton или делать это вручную (см. ниже), после во время входа в систему, SDK Facebook всегда запрашивает разрешение на доступ к пользовательским данным, даже если пользователь уже дал разрешение.
Вот код, который я реализую в своем приложении:
Версия 1 - Кнопка входа в систему:
XML:
<com.facebook.widget.LoginButton
android:id="@+id/login_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
Java:
private static final List<String> PERMISSIONS = Arrays.asList("email", "user_groups");
private UiLifecycleHelper uiHelper;
@Override
protected void onCreate(Bundle savedInstanceState){
uiHelper = new UiLifecycleHelper(this, callback);
uiHelper.onCreate(savedInstanceState);
loginButton = (LoginButton) findViewById(R.id.login_button);
loginButton.setReadPermissions(PERMISSIONS);
}
private Session.StatusCallback callback = new Session.StatusCallback() {
@Override
public void call(Session session, SessionState state, Exception exception) {
//modify interface or something
}
};
Версия 2 - вручную
XML:
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/button"
android:onClick="buttonOnClick"
android:text="Login" />
Java:
private static final List<String> PERMISSIONS = Arrays.asList("email", "user_groups");
public void buttonOnClick(View v) {
System.out.println("botaoOnClick");
Session session = Session.getActiveSession();
if (!session.isOpened() && !session.isClosed()) {
System.out.println("session: " + session);
session.openForRead(new Session.OpenRequest(this).setPermissions(PERMISSIONS).setCallback(callback));
}
else {
Session.openActiveSession(this, true, callback);
}
}
private Session.StatusCallback callback = new Session.StatusCallback() {
@Override
public void call(Session session, SessionState state, Exception exception) {
//modify interface or something
}
};
Даже примеры приложений, которые поставляются с sdk, работают таким образом, но я уже видел некоторые другие приложения (например, Foursquare), работающие так, как я считаю, это естественное поведение (только запрашивает разрешения, если пользователь hasn ' t уже дал им).
Итак, кто-нибудь знает способ достижения желаемого результата? Предпочтительно без редактирования самого SDK Facebook.
Спасибо заранее!
Изменить 1. Дополнительная информация: при проверке переменной сеанса на методе обратного вызова разрешения всегда становятся пустыми, когда выполняется условие выше. Если пользователь отказывается давать разрешение (не в первый раз) и пытается снова войти в систему, сеанс приходит с разрешениями, которые пользователь уже дал в прошлом, как и ожидалось.
Изменить 2 (в 2013-06-28). Я решил загрузить видео, воспроизводя проблему, так как я не уверен, что все понимают, что я имел в виду в своем объяснении.
Ссылка здесь: http://www.youtube.com/watch?v=w4qJfoiVSsU