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

Kotlin中FCM推送特定用户遇INVALID_KEY错误及定向推送问题

Firebase FCM推送问题排查与解决方案

一、解决401 INVALID_KEY错误

出现401错误是因为请求授权密钥无效,按以下步骤排查:

  • 确认Server Key正确性:登录Firebase控制台,进入项目设置→云消息传递,复制「服务器密钥」(不要使用旧版Legacy Server Key),将代码中$key替换为该密钥,确保无空格、换行或多余字符。
  • 检查请求头格式:Authorization头必须严格遵循key=你的Server Key格式,不能添加额外空格或符号。
  • 验证项目匹配性:确保Server Key所属的Firebase项目,与当前应用的包名、SHA-1签名完全匹配,否则密钥会被判定无效。
  • 建议后端发送推送:FCM官方不推荐在客户端直接发送推送请求,存在密钥泄露风险,若坚持客户端发送,需确保密钥未被反编译泄露。

二、实现向特定用户推送

当前代码仅能向自身推送,要实现特定用户推送需完成以下流程:

  1. 存储用户令牌到后端
    在MyFirebaseMessagingService的onNewToken方法中,将新生成的令牌上传到后端数据库,与用户ID绑定存储:
    override fun onNewToken(token: String) {
        super.onNewToken(token)
        // 调用后端接口,将token与当前登录用户ID关联存入数据库
        // 示例:api.updateUserToken(userId, token)
    }
    
  2. 获取目标用户令牌
    当需要发送推送时(比如用户发布评论后),从后端数据库根据目标用户的ID查询对应的FCM令牌,而非获取当前用户的令牌。
  3. 调用推送函数发送
    将查询到的目标用户令牌传入sendPushNotification函数:
    // 假设已从后端获取到目标用户的token:targetUserToken
    sendPushNotification(targetUserToken, "오늘도청춘", description.toString())
    
  4. 维护令牌有效性
    定期清理数据库中无效的令牌(比如用户卸载应用后,FCM会返回InvalidRegistration错误),同时在onNewToken中及时更新用户的令牌,避免因令牌过期导致推送失败。

补充代码优化建议

  • 在sendPushNotification中添加令牌非空判断,避免空令牌导致请求失败:
    fun sendPushNotification(token: String?, title: String, body: String) {
        token ?: run {
            Log.d("푸시", "토큰이 비어있습니다")
            return
        }
        // 剩余原有代码...
    }
    
  • 通知构建时添加点击跳转逻辑,提升用户体验:
    // 创建跳转Intent
    val intent = Intent(this, TargetActivity::class.java).apply {
        flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
    }
    val pendingIntent: PendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_IMMUTABLE)
    
    builder.setContentTitle(title)
        .setContentText(body)
        .setSmallIcon(R.drawable.ic_illustimage)
        .setContentIntent(pendingIntent) // 添加点击跳转
        .setAutoCancel(true) // 点击后自动取消通知
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 17:37:08