You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Kotlin集成API遇Missing Authentication Token问题求助

Android Kotlin Retrofit集成API时提示"Missing Authentication Token",API Key未正确携带

问题根源

你的代码存在重复设置API Key请求头的冲突:OkHttp拦截器已经全局添加了X-API-KEY,但Retrofit接口方法又通过@Header参数要求传入该值。如果调用时传入的apiKey为空(比如BuildConfig.API_KEY未正确配置),会直接覆盖拦截器的设置,导致请求头里的API Key丢失,触发认证错误。

修复方案

方案1:移除接口方法中的@Header参数(推荐)

既然已经通过拦截器全局注入API Key,无需在接口方法里重复定义:

修改SightHoundApiService接口:

interface SightHoundApiService {
    @POST(apiURL)
    @Headers("Content-Type: application/json")
    fun annotateImageLicensePlate(
        @Body requestBody: LicensePlateRequest
    ): Call<LicensePlateResponse>
}

修改调用逻辑:

fun annotateImageLicensePlate(requestBody: LicensePlateRequest): Call<LicensePlateResponse> {
    return RetrofitClient.instance.annotateImageLicensePlate(requestBody)
}

// 调用时无需传入apiKey
val request = annotateImageLicensePlate(requestBody)

方案2:保留接口@Header参数,移除拦截器中的API Key设置

如果需要针对不同请求传递不同API Key,就去掉拦截器里的X-API-KEY配置:

修改RetrofitClient:

object RetrofitClient {
    val instance: SightHoundApiService by lazy {
        val okHttpClient = OkHttpClient.Builder()
            .addInterceptor { chain ->
                val request = chain.request()
                val newRequest = request.newBuilder()
                    .header("Content-Type", "application/json")
                    // 移除这行API Key设置
                    .build()
                chain.proceed(newRequest)
            }
            .addInterceptor(HttpLoggingInterceptor().setLevel(HttpLoggingInterceptor.Level.HEADERS))
            .build()

        Retrofit.Builder()
            .baseUrl(Constants.BASE_URL)
            .addConverterFactory(GsonConverterFactory.create())
            .client(okHttpClient)
            .build()
            .create(SightHoundApiService::class.java)
    }
}

关键检查点

  1. 验证BuildConfig.API_KEY的有效性:
    打开BuildConfig文件(Android Studio双击Shift搜索即可找到),确认API_KEY的值是否正确。如果是在gradle中配置的,确保格式正确:

    // app/build.gradle的defaultConfig块内
    buildConfigField("String", "API_KEY", "\"你的实际API密钥\"")
    

    注意外层引号要转义,否则会被识别为变量而非字符串。

  2. 查看完整请求头日志:
    你的HttpLoggingInterceptor已设置为Level.HEADERS,在Logcat中搜索OkHttp,可以看到实际发送的请求头。检查X-API-KEY是否存在、值是否正确——如果日志里没有这个字段,说明设置未生效或传入的值为空被Retrofit忽略。

内容的提问来源于stack exchange,提问作者migapines

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 14:48:15