2017-03-10 8 views
2

私はREST APIを消費するAndroidアプリを構築しています。私はOkHttpを使用しています。私が打つAPIはAPIキーが必要です。 APIキーをstrings.xmlファイルに保存するのがベストプラクティスだと思っていました。私はまた、Android sdk固有のコードを含まないことがベストプラクティスだと考えていましたが、今はこれらの2つの考えが矛盾している可能性があることを認識しています。AndroidアプリケーションのREST APIコードで文字列を使用するにはどうすればよいですか?

私はMVPアーキテクチャを使用してアプリケーションを構築することだし、私のNetModuleクラスで、私はこのようになります方法provideOkHttpClient(キャッシュ)があります。私は、「追加クエリパラメータからインターセプタコードを持っ

@Provides 
@Singleton 
OkHttpClient provideOkhttpClient (Cache cache){ 
    OkHttpClient.Builder client = new OkHttpClient.Builder(); 
    client.cache(cache); 

    // Add GiantBomb.com api key to request 
    client.addInterceptor(new Interceptor() { 
     @Override 
     public Response intercept(Chain chain) throws IOException { 
      Request original = chain.request(); 
      HttpUrl originalHttpUrl = original.url(); 

      HttpUrl url = originalHttpUrl.newBuilder() 
        .addQueryParameter("apikey", MY_API_KEY) 
        .build(); 

      // Request customization: add request headers 
      Request.Builder requestBuilder = original.newBuilder() 
        .url(url); 

      Request request = requestBuilder.build(); 
      return chain.proceed(request); 
     } 
    }); 

    return client.build(); 
} 

を」セクションhere

私のAPIキーを保存する最良の方法は何ですか?このキーは決して変更してはいけません。私はこのアプリのために1つのウェブサイトのAPIしか使用していないので、今はすべてのリクエストに含まれます。私はstrings.xmlにAPIキーを入れようとしましたが、getString()を呼び出すコンテキストがありません。もちろん、私はAPIキーをローカルの文字列に格納することができますが、それが最善の方法であるかどうかはわかりません。どんな助けもありがとう!

Here is the full NetModule.java classの場合に役立ちます。ここでは、getStringメソッドを呼び出そうとしていますが、コンテキストがなく、コンテキストを取得することもできません。それがまだ明白でない場合、これはMVPへの私の最初の進出であり、UdacityのAndroid Apps開発コースを受講した後の最初のAndroidアプリだけです。

答えて

1

既にDaggerを使用しているので、APIキーをNetModuleクラスに挿入するのに使ってみませんか?

+0

Okhttpインスタンスを注入する私のprovideOkhttpClient()メソッドのAPI呼び出しにキーを追加することで、私がやっていることではありませんか?または、キーを挿入するためにNetmoduleクラス内に別のメソッドを作成することについて話していますか?キーは常に同じです。 – intA

関連する問題