Ich versuche herauszufinden, wie der beste Weg wäre, einen Retrofit-Client zu implementieren, der AccountManager.getAuthToken() für den OAuth2-Flow unterstützt. Ich folge den U2020Implementieren von OAuth2 mit AccountManager, Retrofit und Dolch
Im Idealfall würde Ich mag einen einfachen Injektor entlang dieser Linien haben
public class ExampleFragment extends InjectionFragment { @Inject ApiDatabase database; @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); subscribe(database.getSomeData(), ...); } }
Ich bin ein RequestInterceptor ähnlich wie 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()); } }
und
Berücksichtigungpublic 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); } }
Ich bin mir nicht sicher, wie ich den ApiKeyProvider in die ApiHeaders-Klasse injizieren soll, da er von einem "ActivityModule" abhängt (tiefer im DAG Graph). Auch nicht sicher, wie mit Ausnahmen umzugehen.
Kann jemand ein vollständiges funktionierendes Beispiel zur Verfügung stellen?