Here is my NetworkMoudle class which provides dependecies I have tried this way
@Module
@InstallIn(SingletonComponent::class)
object NetworkModule {
@Provides
fun providesAuthToken() : String = ""
@Singleton
@Provides
fun providesGson():Gson=GsonBuilder().enableComplexMapKeySerialization().serializeNulls().setPrettyPrinting()
.setVersion(1.0).create()
@Qualifiers.AuthInterceptorOkHttpClient
@Singleton
@Provides
fun providesAuthInterceptor(token : String) : Interceptor =
AuthenticationInterceptor(token)
@Singleton
@Provides
fun providesOkhttpClient(@ApplicationContext context: Context ,
@Qualifiers.AuthInterceptorOkHttpClient authInterceptor : Interceptor ): OkHttpClient =
OkHttpClient.Builder()
// .addNetworkInterceptor()
// .addInterceptor(httpLoggingInterceptor)
.addInterceptor(authInterceptor)
.connectTimeout(100, TimeUnit.SECONDS)
.readTimeout(100, TimeUnit.SECONDS)
.build()
@Singleton
@Provides
fun provideRetrofit(gson: Gson, client: OkHttpClient): Retrofit = Retrofit.Builder()
.addConverterFactory(GsonConverterFactory.create(gson))
.baseUrl(Constants.BASE_URL_V2)
.client(client)
.addCallAdapterFactory(NetworkResultCallAdapterFactory.create())
.build()
@Provides
@Singleton
fun provideApiService(retrofit: Retrofit) : ApiService =
retrofit.create(ApiService::class.java)
}
And this is my interceptor class
class AuthenticationInterceptor(private val authToken: String) : Interceptor {
override fun intercept(chain: Interceptor.Chain): Response {
val original: Request = chain.request()
val builder: Request.Builder = original.newBuilder()
.header("Authorization", "Bearer $authToken")
val request: Request = builder.build()
return chain.proceed(request)
}
}
the way i'm providing authToken is badly, how i proivde this token using best practice. and please go through my NetworkModule