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

Kotlin实现Firebase推送Post请求无响应,请求排查配置错误

问题分析与修复方案

我帮你梳理下代码里的几个关键问题,这些应该就是导致请求无响应的核心原因:

1. Authorization 请求头配置错误

你在RestInterface里的Authorization头只写了"Authorization: key",但FCM要求的格式是"Authorization: key=你的服务器密钥"——这里缺少了关键的=符号和你实际使用的服务器密钥(就是Postman请求里正常工作的那个密钥)。

修复后的接口定义:

interface RestInterface {
    @Headers(
        "Content-Type: application/json",
        "Authorization: key=YOUR_REAL_SERVER_KEY" // 替换成你的真实服务器密钥
    )
    @POST("fcm/send")
    fun sendingNotification(@Body body: NotificationBody): Call<ResponseBody>
}

2. 实体类序列化字段不匹配

你的NotificationBody和Data类存在两处序列化问题:

  • 你把Data对象标注为@SerializedName("notification"),但FCM的notification字段中,消息内容的标准字段名是body而非你写的content;
  • Kotlin里完全不用单独写init块初始化字段,直接用主构造函数配合SerializedName更简洁不易出错。

修复后的实体类(对应FCM的notification类型消息):

data class NotificationBody(
    @SerializedName("notification") val notification: NotificationContent,
    @SerializedName("to") val to: String
)

data class NotificationContent(
    @SerializedName("title") val title: String,
    @SerializedName("body") val body: String // 改为FCM标准字段名body
)

如果你的Postman请求用的是data字段(而非notification),只需把NotificationBody里的@SerializedName("notification")改成@SerializedName("data")即可。

3. Retrofit Callback 的 Kotlin 语法错误

你现在用的是Java风格的Callback写法,在Kotlin里会直接触发语法错误,正确的Kotlin写法应该是这样的:

response.enqueue(object : Callback<ResponseBody> {
    override fun onResponse(call: Call<ResponseBody>, response: Response<ResponseBody>) {
        if (response.isSuccessful) {
            Log.d("kkkk", "通知发送成功:${response.body()?.string()}")
        } else {
            Log.e("kkkk", "请求失败:${response.errorBody()?.string()}")
        }
    }

    override fun onFailure(call: Call<ResponseBody>, t: Throwable) {
        Log.e("kkkk", "请求出错:${t.message}", t)
    }
})

Kotlin里不需要@Override和public关键字,要用object :创建匿名内部类,同时建议在onResponse里判断请求是否成功,打印错误信息方便排查问题。

4. 其他潜在检查点

  • 确保deviceId是有效的FCM令牌,和Postman请求里使用的完全一致;
  • 确认AndroidManifest中添加了网络权限:<uses-permission android:name="android.permission.INTERNET" />(虽然Postman能成功,但代码里没加的话会直接导致请求失败)。

按照上面的修改调整后,再测试应该就能正常发送推送通知了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:23:32