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?