2015-12-06 3 views
1

У меня есть приложение для Android, которое использует sdk для входа в систему. Для этого я использую виджет LoginButton. Процесс регистрации работает очень хорошо, но у меня возникла небольшая проблема: когда я закрываю приложение или переустанавливаю его, он автоматически регистрируется в Facebook (текст на кнопке переключается на «Выход»). Я не хочу иметь такое поведение: мне нужно, чтобы пользователь нажимал кнопку для входа в систему при каждом запуске приложения. Я проверил в Интернете, и кажется, что эта функция называется «единый вход», но я не уверен в этом. Я нашел несколько способов сделать это, но никто из них не работает. Я использовал Facebook SDK 4. Это часть кода, который создает экземпляр Activity.Отключить автоматический вход в систему с помощью Facebook loginbutton

FacebookSdk.sdkInitialize(getApplicationContext()); 
callbackManager = CallbackManager.Factory.create(); 
this.setContentView(R.layout.login_layout); 

getSupportActionBar().hide(); 

GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN).build(); 
mGoogleApiClient = new GoogleApiClient.Builder(this).enableAutoManage(this, this).addApi(Auth.GOOGLE_SIGN_IN_API, gso).build(); 

/*accessTokenTracker = new AccessTokenTracker() { 
    @Override 
    protected void onCurrentAccessTokenChanged(AccessToken oldAccessToken, AccessToken newAccessToken) { 
     updateWithToken(newAccessToken); 
    } 
};*/ 

LoginManager.getInstance().logInWithReadPermissions(LogInActivity.this, Arrays.asList("public_profile", "user_birthday", "email")); 
LoginManager.getInstance().setLoginBehavior(LoginBehavior.SUPPRESS_SSO); 
fb_login = ((LoginButton) findViewById(R.id.fb_login)); 
fb_login.setLoginBehavior(LoginBehavior.SUPPRESS_SSO); 

fb_login.registerCallback(callbackManager, new FacebookCallback<LoginResult>() { 
    @Override 
    public void onSuccess(LoginResult loginResult) { 
     Log.i("Facebook connect", "Connection success"); 
    } 

    @Override 
    public void onCancel() { 
     Log.i("Facebook", "Super c'et cancel"); 
     ((TextView) findViewById(R.id.account)).setText("Annulé"); 
    } 

    @Override 
    public void onError(FacebookException error) { 
     Log.i("Facebook", "Super y a une erreur"); 
     ((TextView) findViewById(R.id.account)).setText("Erreur"); 
    } 
}); 

Есть ли у кого-нибудь идеи, как отключить автоматическое соединение?

+0

Что вы пробовали? вы пробовали вызывать Logout() в диспетчере входа? или, может быть, вызывать это и видеть, помогает ли он ['AccessToken.setCurrentAccessToken (null);'] (https://github.com/facebook/facebook-android-sdk/blob/001984c85bbb5ccb7a3df4e33fe3090d22a8ac88/samples/SwitchUserSample/src/com/example /switchuser/SettingsFragment.java) – ifaour

ответ

4

для Facebook SDK 4 и далее, можно программно выход из системы с помощью:

LoginManager.getInstance().logOut();

Теперь проблема в том, где вы размещаете этот код. Если с выходом Facebook выйдет сообщение, когда приложение отправлено на задний план, вы можете использовать методы onPause() или onStop().

Большая часть приходит. Вы не можете определить, убито ли приложение. Потому что он просто убит, и вы не получаете никаких обратных вызовов, чтобы поймать это событие.

Итак, если вы все равно хотите реализовать эту вещь, вы должны сделать это, когда приложение запустится.

  1. Инициализировать Facebook SDK:

  2. Проверьте, если пользователь вошел в систему

  3. Если да в шаге 2, запустите вручную выход из системы..

    FacebookSdk.sdkInitialize(getApplicationContext()); 
    if(AccessToken.getCurrentAccessToken() != null) { 
        LoginManager.getInstance().logOut(); 
    } 
    
1

шаг 1: как было написано, прежде чем вы должны сделать

LoginManager.getInstance().logOut(); 

шаг 2: Для того, чтобы удалить Автологин просто избегать поведения Facebook приложения. Вы можете сделать это через LoginBehavior.

LoginManager.getInstance().setLoginBehavior(LoginBehavior.WEB_ONLY); 
+0

Спасибо! Это работа. – Sirelon

0

Удалить эту строку из кода

LoginManager.getInstance().logInWithReadPermissions(LogInActivity.this, Arrays.asList("public_profile", "user_birthday", "email"));