2016-05-13 3 views
0

Я собираюсь сделать систему входа в систему с OAuth 2.0 для моего приложения, все правильно, пока длинна до не Expired Токен!OAuth Автоматическое обновление маркера, если маркер истек

Для этого раздела я писал этот метод:

public static String getAccessToken(){ 

    String accessToken; 

    if(!UserSession.getInstance().isExpired()){ 
     return UserSession.getInstance().getUserAuthAccessToken(); 
    } else { 

     PostRequests.getFreshToken(new ResultListener<String>() { 
      @Override 
      public void getResult(String result, boolean error) { 

       if(error){ 

       } else { 

        Authorization authorization = gson.fromJson(result, Authorization.class); 
        UserSession.getInstance().setUserAuthorizationInfo(authorization.AccessToken, authorization.TokenType, authorization.Expiration, authorization.RefreshToken, authorization.Scope); 
        accessToken = authorization.AccessToken; 
       } 

      } 
     }); 

    } 

} 

Как вы можете видеть, я вернуть маркер доступа магазин в мое приложение совместно prefrences, если не истек, но если истек, я делаю Refresh Request (Volley + Gson), чтобы сделать это свежим.

Но я не могу добраться до accessToken из внутреннего класса :(

Как вернуть строку из этого метода?

ответ

1

Использование слушателя является одним из способов решения этой проблемы.

public interface ITokenListener { 
    void onTokenObtained(String accessToken); 
} 

public void usingGetAccessTokenMethod() { 
    getAccessToken(new ITokenListener() { 
     @Override 
     public void onTokenObtained(String accessToken) { 
      //use accessToken 
     } 
    }); 
} 

public void getAccessToken(final ITokenListener listener){ 

    if(!UserSession.getInstance().isExpired()){ 
     listener.onTokenObtained(UserSession.getInstance().getUserAuthAccessToken()); 
    } else { 

     PostRequests.getFreshToken(new ResultListener<String>() { 
      @Override 
      public void getResult(String result, boolean error) { 

       if(error){ 

       } else { 

        Authorization authorization = gson.fromJson(result, Authorization.class); 
        UserSession.getInstance().setUserAuthorizationInfo(authorization.AccessToken, authorization.TokenType, authorization.Expiration, authorization.RefreshToken, authorization.Scope); 
        listener.onTokenObtained(UserSession.getInstance().getUserAuthAccessToken()); 
       } 

      } 
     }); 

    } 

} 
+0

Его не помогает, потому что я собираюсь использовать '.getAccessToken()' для добавления токена к концу моего запроса url как 'final String URL = Constant.BaseUrl + Constant.Token + getAccessToken()' – MAY3AM

+0

вы можете сделать что-то вроде это public void usingGetAccessTokenMethod() { getAccessToken (новый ITokenListener() { @Override общественного недействительными onTokenObtained (String маркер доступа) { конечная строка URL = Constant.BaseUrl + Constant.Token + + Constant.Limit маркер доступа; \t \t \t // используйте здесь адрес } }); } но, как я уже сказал, это один из способов. –

Смежные вопросы