2014-06-09 5 views
5

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

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?

Antwort

5

Dies endete ein wenig lang. This GIST umfasst hoffentlich alle relevanten Dateien