Как обновить токен доступа к facebook в Android без повторного входа в систему?

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

public void onClickLogin() {
        LoginManager.getInstance().logInWithReadPermissions(this, PERMISSIONS);
}

Теперь в следующий раз я поместил кнопку, чтобы поделиться приложением на временной шкале facebook. Для этого я использовал этот код.

public void publishStory() {

        Set<String> permissions = AccessToken.getCurrentAccessToken().getPermissions();

        final List<String> PUBLISH_PERMISSIONS = Arrays.asList("publish_actions");
        if (!isSubsetOf(PUBLISH_PERMISSIONS, permissions)) {
            Log.d(FBTAG,"facebook publish permission login");
            pendingPublishReauthorization = true;
            LoginManager.getInstance().logInWithPublishPermissions(this, PUBLISH_PERMISSIONS);
            return;
        }

        ShareLinkContent content = new ShareLinkContent.Builder()
        .setContentUrl(Uri.parse("https://developers.facebook.com"))
        .setContentTitle("My message ")
        .build();

        ShareApi.share(content, new FacebookCallback<Sharer.Result>() {

            @Override
            public void onSuccess(Result result) {
                // TODO Auto-generated method stub
                Log.d(FBTAG,"Facebook post id is "+result.getPostId());
            }

            @Override
            public void onCancel() {
                // TODO Auto-generated method stub
                Log.d(FBTAG,"Facebook share cancelled");
            }

            @Override
            public void onError(FacebookException error) {
                // TODO Auto-generated method stub
                Log.d(FBTAG,"Facebook error during sharing: "+error.getMessage());

            }
    }

Так что теперь у меня есть и права на публикацию.

Теперь вариант использования, если пользователь удаляет разрешение на публикацию из приложения в Интернете. Эта функция проверяет наличие разрешения на устройстве, которое по-прежнему показывает как предоставленные разрешения (публикация, чтение), поэтому пытается поделиться историей, а затем получает ошибку необходимого разрешения. Таким образом, проблема заключается в том, что AccessToken сохраняется в кеше как SharedPreferences в Android и по-прежнему содержит оба разрешения, в то время как пользователь фактически обновляет предоставленные им разрешения. Есть ли способ обновить токен доступа?


person Rohit Goyal    schedule 02.04.2015    source источник


Ответы (1)


Вы можете использовать AccessTokenTracker для обновления текущего токена, если он изменилось. Попробуйте в прослушивателе:

         @Override
         protected void onCurrentAccessTokenChanged(
                 AccessToken oldAccessToken,
                 AccessToken currentAccessToken) {
             AccessToken.setCurrentAccessToken(currentAccessToken); //update current token manually, from listener.
         }
person VadymVL    schedule 02.04.2015
comment
Пожалуйста, посмотрите это руководство - developers.facebook.com/docs /facebook-login/android/ Этот код вы должны поместить в метод активности onCreate. - person VadymVL; 02.04.2015
comment
Пробовал так делать. Но у моего приложения все еще нет обновленных разрешений. Я поместил этот журнал в приведенный выше код Log.d (FBTAG, текущие разрешения токена доступа к facebook: +currentAccessToken.getPermissions()); и получить это. 04-02 18:17:07.058: D/fb(7130): текущие разрешения токена доступа facebook: [public_profile, publish_actions] - person Rohit Goyal; 02.04.2015
comment
Попробуйте посмотреть на этот тоже. Если я правильно вас понимаю, вероятность того, что пользователь вручную удалит разрешение из WEB, очень мала. Даже если это произойдет, Facebook SDK при выполнении запроса к серверу проверит токен, и если у него нет необходимого разрешения, он должен показать какую-либо ошибку или диалоговое окно разрешения. Я не нашел ссылок на SDK для ручного обновления токена из кеша — возможно, SDK делает это автоматически. - person VadymVL; 02.04.2015
comment
это именно то, что я получаю. Итак, в настоящее время я вручную прошу пользователя войти в систему с правильными разрешениями на случай, если я получу ошибку авторизации. Но все же надеюсь найти лучшее решение. - person Rohit Goyal; 03.04.2015
comment
Насколько я знаю, это единственное и правильное (согласно политике разрешений FB) решение. Пользователь должен вручную выбрать, хочет ли он предоставить его или нет. Вы не можете получить разрешение, не спросив об этом. Так что это единственный способ. - person VadymVL; 03.04.2015
comment
да, это так, это отстой, но вам нужно использовать это: developers.facebook.com/docs/facebook-login/android/ - person Boy; 20.04.2015