Alo*_*urg 5 android accountmanager oauth-2.0 dagger retrofit
我正在试图找出实现支持OAuth2流的AccountManager.getAuthToken()的Retrofit客户端的最佳方法.我跟随U2020
理想情况下,我想在这些线上有一个简单的注射器
public class ExampleFragment extends InjectionFragment {
@Inject ApiDatabase database;
@Override public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
subscribe(database.getSomeData(), ...);
}
}
我正在考虑一个类似于示例的RequestInterceptor
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());
}
}
和
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);
}
}
我不确定如何将ApiKeyProvider注入ApiHeaders类,因为它取决于"ActivityModule"(在匕首DAG图下方).也不知道如何处理异常.
谁能提供一个完整的工作示例?