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

DRF集成django-push-notifications时GCMDevice的registration_id取值问题

registration_id 参数正确取值说明

django-push-notifications 库中GCMDevice模型的registration_id字段,必须存客户端侧通过FCM SDK生成的、和用户当前使用设备唯一绑定的FCM设备注册令牌(FCM Registration Token),绝对不能像你现在代码里那样硬编码写死为"token"字符串。

取值逻辑说明

  • 这个值完全由FCM客户端SDK生成,后端无法自行生成,必须由前端/移动端客户端在完成FCM初始化后获取,再通过接口传递给后端。
    • 安卓客户端可通过FirebaseMessaging.getInstance().getToken()方法获取该令牌
    • iOS客户端需先获取APNs推送令牌,再交给FCM SDK交换得到对应FCM注册令牌
    • Web端可通过firebase.messaging().getToken()方法获取该令牌

正确绑定流程

你现在的用户创建逻辑里直接硬编码token的写法是错误的,正确流程应该是:

  1. 用户在客户端完成登录后,客户端先初始化FCM服务,拿到当前设备的有效注册令牌
  2. 客户端调用后端专门开发的设备绑定接口,将拿到的真实令牌、设备信息等参数传给后端
  3. 后端校验用户身份后,将客户端传来的真实令牌作为registration_id值,创建对应GCMDevice记录和用户做绑定

注意事项

  • FCM注册令牌不是永久有效的,用户卸载重装APP、清除APP数据、恢复设备出厂设置、FCM服务端定期轮换令牌时,旧令牌都会失效。客户端必须监听FCM的令牌刷新事件,一旦拿到新令牌就要主动调用后端接口,更新对应用户对应设备的GCMDevice记录,避免推送投递失败。
  • 同一用户如果在多台设备登录,每台设备会生成独立的注册令牌,需要为每台设备单独创建GCMDevice记录,不要覆盖该用户之前的设备记录,否则会导致用户其他设备收不到推送。
  • 如果你使用的是较新版本的FCM HTTP v1接口,仅在settings中配置FCM_API_KEY已经无法满足鉴权要求,需要额外配置服务账号凭证,但不影响当前registration_id的取值逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 11:33:15