2014-06-09 6 views
5

OAuth2 흐름을 위해 AccountManager.getAuthToken()을 지원하는 Retrofit 클라이언트를 구현하는 가장 좋은 방법은 무엇인지 알아 내려고합니다. 내가 the exampleAccountManager, Retrofit 및 Dagger를 사용하여 OAuth2 구현

 
public final class ApiHeaders implements RequestInterceptor { 
    ApiKeyProvider apiKeyProvider; 

    @Inject 
    public ApiHeaders(ApiKeyProvider apiKeyProvider) { 
    this.apiKeyProvider = apiKeyProvider; 
    } 

    @Override 
    public void intercept(RequestFacade request) { 
    // How to handle exceptions from getAuthToken? 
    request.addHeader("Authorization", "Bearer " + apiKeyProvider.getAuthKey()); 
    } 
} 

유사한 RequestInterceptor을 고려하고

 
public class ExampleFragment extends InjectionFragment { 
    @Inject ApiDatabase database; 

    @Override public void onActivityCreated(Bundle savedInstanceState) { 
    super.onActivityCreated(savedInstanceState); 
    subscribe(database.getSomeData(), ...); 
    } 
} 

내가 이상적으로 U2020

을 다음있어 나는이 라인을 따라 간단한 인젝터를하고 싶습니다

 
public class ApiKeyProvider { 
    AccountManager accountManager; 
    Activity activity; 

    public ApiKeyProvider(Activity activity, AccountManager accountManager) { 
    this.activity = activity; 
    this.accountManager = accountManager; 
    } 

    public String getAuthKey() throws AccountsException, IOException { 
    AccountManagerFuture accountManagerFuture = accountManager.getAuthTokenByFeatures(ACCOUNT_TYPE, 
     AUTHTOKEN_TYPE, new String[0], activity, null, null, null, null); 

    return accountManagerFuture.getResult().getString(KEY_AUTHTOKEN); 
    } 
} 

"ActivityModule"(단검 DAG 그래프 아래쪽)에 따라 ApiKeyProvider를 ApiHeaders 클래스에 삽입하는 방법을 잘 모르겠습니다. 예외 처리 방법도 확실하지 않습니다.

누구나 완전한 작동 예제를 제공 할 수 있습니까?

답변

5

이것은 약간 길었습니다. This GIST은 모든 관련 파일을 포함하고 있습니다.