2014-06-09 9 views
5

Próbuję dowiedzieć się, jaki byłby najlepszy sposób wdrożenia klienta Retrofit, który obsługuje AccountManager.getAuthToken() dla przepływu OAuth2. Obserwuję ten U2020Implementacja OAuth2 z AccountManager, Retrofit i Dagger

Idealnie chciałbym mieć prosty wtryskiwacz wzdłuż tych linii

 
public class ExampleFragment extends InjectionFragment { 
    @Inject ApiDatabase database; 

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

Zastanawiam się RequestInterceptor podobną do the example

 
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()); 
    } 
} 

i

 
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); 
    } 
} 

Nie jestem pewien, jak wprowadzić ApiKeyProvider do klasy ApiHeaders, ponieważ zależy to od "ActivityModule" (w dół wykresu Dag sztyletu). Również nie wiesz, jak obsługiwać wyjątki.

Czy ktoś może przedstawić pełny przykład działania?

Odpowiedz

5

To było trochę za długie. This GIST Mam nadzieję, że obejmuje wszystkie odpowiednie pliki