Intereting Posts
Ошибка «Package R не существует» при создании с помощью Gradle из командной строки Как установить разделитель между столбцами в tablelayout? Android TabLayout с активной вкладкой всегда в центре, так же, как в приложении Play Newsstand Android – добавление просмотров в изображения не обновляется – onClick Matrix.setTranslate () только преобразует визуальную поверхность View, а не зону с кликом? Parse anonymous class не реализует абстрактный метод Обновить Android ListActivity при изменении данных списка? Стоимость вызова метода на Android Отправка электронной почты с помощью GMail в Android Android: попытка вызова getduration без действительного медиаплеера Студия Android не обновляет новые версии Firebase Analytics загружается успешно, но не отображается на консоли Firebase даже через 2 дня Как получить «последнюю синхронизацию» времени для учетной записи? Включить экран на устройстве Получить высоту и положение строки состояния для api 11, чтобы изменить цвет

Использование facebook SDK на Android дает «Пользователь зарегистрирован как пользователь Facebook другого пользователя».

Я обновляю свое использование SDK для Facebook до последней версии. Следующий код prety многократно поднимается по строкам из собственных примеров Facebook, которые можно найти здесь: https://developers.facebook.com/docs/facebook-login/android/v2.3

import android.content.Intent; import android.os.Bundle; import android.support.v4.app.FragmentActivity; import android.util.Log; import com.facebook.CallbackManager; import com.facebook.FacebookCallback; import com.facebook.FacebookException; import com.facebook.FacebookSdk; import com.facebook.login.LoginManager; import com.facebook.login.LoginResult; import java.util.Arrays; public class TestFb extends FragmentActivity{ CallbackManager callbackManager; FacebookController fbController; @Override public void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); fbController = FacebookController.getInstance(this); FacebookSdk.sdkInitialize(getApplicationContext()); final LoginManager loginManager = LoginManager.getInstance(); callbackManager = CallbackManager.Factory.create(); loginManager.registerCallback(callbackManager, new FacebookCallback<LoginResult>() { @Override public void onSuccess(LoginResult loginResult) { String userId = loginResult.getAccessToken().getUserId(); String token = loginResult.getAccessToken().getToken(); Log.d("fb", "ID: " + userId + " Token: "+ token); } @Override public void onCancel() { finish(); } @Override public void onError(FacebookException e) { Log.d("fb", "Exception: " + e.getMessage()); } }); loginManager.logInWithReadPermissions(this, Arrays.asList(new String[]{"email", "user_likes"})); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); callbackManager.onActivityResult(requestCode, resultCode, data); } } 

Проблема в том, что это не работает, когда пользователь уже вошел в приложение facebook на своем телефоне. В этом случае это приводит к ошибке «Пользователь зарегистрирован как пользователь Facebook».

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

Если вы хотите войти в систему с пользователем, который теперь зарегистрирован в приложении Facebook, и у вас все еще есть токен, действительный для предыдущего пользователя, вы можете обнаружить ошибку и выйти из своего FacebookCallback следующим образом:

  @Override public void onError(FacebookException e) { if (e instanceof FacebookAuthorizationException) { if (AccessToken.getCurrentAccessToken() != null) { LoginManager.getInstance().logOut(); } } } 

Затем вы можете снова войти в систему, используя LoginManager.

Большое спасибо @sorianiv и @ ming-li за их ответы! Я хочу описать свой случай более подробно, потому что он может быть полезен для кого-то.

SDK для Windows создает файл общих настроек, называемый «com.facebook.AccessTokenManager.SharedPreferences». И когда пользователь подписывается с помощью facebook SDK, в нем хранятся токен доступа, имя пользователя и другая информация о токенах. Моя проблема заключалась в том, что я не звонил

 LoginManager.getInstance().logOut() 

Когда пользователь выдает в моем приложении. И кеш в общих предпочтениях не был очищен. Поэтому, когда пользователь, чем пытается войти в систему с другим пользователем Facebook Facebook, SDK получил пользовательские данные из кэша и возвратил ошибку:

«Пользователь зарегистрирован как пользователь Facebook».

В моем случае решением было просто вызвать logOut (), когда пользователь выйдет из моего приложения.

Вы получите эту ошибку, если у вас уже есть действительный токен доступа, но запрашиваете дополнительные разрешения (через вызов LoginManager.logInWithReadPermissions), а пользователь, зарегистрированный в приложении FB, отличается от того, на котором у вас уже есть токен доступа. Вы можете сделать пару вещей:

  1. Убедитесь, что у вас уже есть действительный токен доступа (AccessToken.getCurrentAccessToken ()! = Null) и не запрашивайте больше разрешений.
  2. Если вам нужно запросить дополнительные разрешения, и вы получите эту ошибку, попросите пользователя выйти из приложения FB и войти в систему как самостоятельно.

Сегодня я столкнулся с такой же проблемой. Я превзошел проблему, используя нижнюю строку кода, когда пользователь нажимает на FbLoginButton

LoginManager.getInstance().logOut();