Отзыв разрешения приложения для Android без очистки токена доступа к facebook

У меня есть активность под названием StarterActivity, которая является активностью запуска моего приложения для Android. Я предоставил пункт меню выхода из системы, при нажатии которого я отменяю все разрешения приложений. Я убедился, что все разрешения отзываются, и мое приложение больше не указано в https://www.facebook.com/settings?tab=applications

Однако токен доступа не очищается.

    switch(item.getItemId())
    {
        case R.id.action_logout:
            GraphRequest delPermRequest = new GraphRequest(AccessToken.getCurrentAccessToken(), "/{user-id}/permissions/", null, HttpMethod.DELETE, new GraphRequest.Callback() {
                @Override
                public void onCompleted(GraphResponse graphResponse) {
                    if(graphResponse!=null){
                        FacebookRequestError error =graphResponse.getError();
                        if(error!=null){
                            Log.e(TAG, error.toString());
                        }else {
                            finish();
                        }
                    }
                }
            });
            Log.d(TAG,"Executing revoke permissions with graph path" + delPermRequest.getGraphPath());
            delPermRequest.executeAsync();
            break;
    }

Я хочу снова запустить мой StarterActivity Intent при выходе из системы.

я добавил

startActivity(new Intent(getApplicationContext(),StarterActivity.class));

после очистки разрешений. Но ни AccessToken.getCurrentAccessToken(), ни Profile.getCurrentProfile() не равны нулю. Возможно, обналичивание?

я тоже пробовал

    AccessTokenTracker accessTokenTracker = new AccessTokenTracker() {
        @Override
        protected void onCurrentAccessTokenChanged(
                AccessToken oldAccessToken,
                AccessToken currentAccessToken) {

            Log.d(TAG,"Access token changed");

            if (currentAccessToken == null){
                //User logged out
                startActivity(new Intent(getApplicationContext(),StarterActivity.class));
            }
        }
    };

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

Я использую SDK 4.x. Подробнее о разрешении — https://developers.facebook.com/docs/graph-api/reference/user/permissions


person Aniket Thakur    schedule 09.08.2015    source источник
comment
Вы пытались выйти из системы таким образом: LoginManager.getInstance().logOut();   -  person sider    schedule 09.08.2015
comment
Да, очевидно, нам нужно вручную установить профиль и токен как нулевые. LoginManager.getInstance().logOut(); Также делает то же самое внизу. Спасибо за чаевые.   -  person Aniket Thakur    schedule 09.08.2015


Ответы (1)


Что, наконец, сработало, так это

LoginManager.getInstance().logOut();

Что он делает внутри, так это устанавливает для каждого токена доступа и профиля значение null.

public void logOut() {
    AccessToken.setCurrentAccessToken((AccessToken)null);
    Profile.setCurrentProfile((Profile)null);
}

Просто отозвать разрешение не получится. Вы можете либо вручную установить токен и профиль как нулевые, либо использовать вышеуказанный API.

person Aniket Thakur    schedule 09.08.2015
comment
Можно ли определить, когда пользователь выходит из приложения Facebook, чтобы мое приложение также могло выйти из системы (удалить токен)? - person Josh; 08.08.2016