Java: Oauth 2.0. Как я могу использовать Google API RefreshTokens, чтобы не запрашивать доступ при каждом запуске моего приложения? - PullRequest
1 голос
/ 10 января 2012

Существует много примеров кода для API Google, показывающих, как получить токен авторизации и использовать его, но я не могу найти никакого примера кода, который показывает, как использовать метод OAuth 2.0 GoogleAccessProtectedResource.refreshToken () в java клиент для получения нового токена авторизации в Java. Поиск в Google ничего не дает, и я могу найти только пример C # на Stackoverflow. Если бы вы могли показать мне пример кода на Java, показывающий, как это делается, это было бы здорово. Платформа, над которой я работаю в Android. Пример модели OAuth 2.0, которую я хотел бы использовать здесь: http://blog.doityourselfandroid.com/2011/08/06/oauth-2-0-flow-android/

Большое спасибо

Ответы [ 2 ]

2 голосов
/ 25 января 2012

Отвечая на мой собственный вопрос здесь. Оказалось, что это довольно просто, вызывая GoogleAccessProtectedResource.refreshToken (), accesstoken обновляется внутри класса, его можно читать и использовать по мере необходимости через его геттер.

0 голосов
/ 10 января 2012

Вы должны были бы поймать 401 (несанкционированные) ошибки.После этого сделайте что-то вроде этого.

accountManager.invalidateAuthToken(accessProtectedResource.getAccessToken());
accessProtectedResource.setAccessToken(null);

После этого просто верните токен.На этот раз пользователю не нужно будет снова авторизовать доступ.

        accountManager.manager.getAuthToken(account, AUTH_TOKEN_TYPE, true,
        new AccountManagerCallback<Bundle>() {
          @Override
          public void run(AccountManagerFuture<Bundle> future) {
            try {
              Bundle bundle = future.getResult();
              if (bundle.containsKey(AccountManager.KEY_INTENT)) {
                Intent intent = bundle.getParcelable(AccountManager.KEY_INTENT);
                intent.setFlags(intent.getFlags() & ~Intent.FLAG_ACTIVITY_NEW_TASK);
                startActivityForResult(intent, REQUEST_AUTHENTICATE);
              } else if (bundle.containsKey(AccountManager.KEY_AUTHTOKEN)) {
                accessProtectedResource.setAccessToken(bundle.getString(AccountManager.KEY_AUTHTOKEN));
                onAuthToken();
              }
            } catch (Exception e) {
              handleException(e);
            }
          }
        }, null);

Для справки см. Образец задачи и соответствующую статью .

...