Django使用fcm-django本地正常生产报send_message缺少参数错误
核心原因
本地与生产环境安装的fcm-django依赖版本不一致:
- 你本地开发环境安装的是1.x.x旧版本,该版本的
FCMDeviceQuerySet.send_message方法支持直接传入title、body、click_action等关键字参数发送通知 - 生产环境安装的是2.0.0及以上新版本,该版本重构了接口设计,要求
send_message方法第一个参数必须传入构造好的Message实例,不再支持直接传零散参数,因此会抛出缺少message参数的报错。
修复方案
有两种可选修复方式:
方案1:对齐依赖版本(最快修复)
将生产环境的fcm-django版本降级到和本地一致的旧版本即可直接兼容现有代码。
你可以在项目的requirements.txt中固定版本号,示例:
fcm-django==1.0.13
重新部署后生产环境安装对应版本即可恢复正常。
方案2:适配新版本接口(推荐长期维护)
如果需要使用新版本的功能特性,可以修改代码适配新的接口规范:
首先导入Message类,再构造消息实例传入send_message方法,修改后的代码如下:
from fcm_django.fcm import Message class All_Device_Notification(models.Model): title = models.TextField(default="") description = models.TextField(default="") link = models.TextField(default="") def __str__(self): return self.title def save(self, *args, **kwargs): filtered_users = User.objects.all() devices = FCMDevice.objects.filter(user__in=filtered_users) # 构造符合新版本要求的Message实例 message = Message( title=self.title, body=self.description, click_action=self.link ) devices.send_message(message) super(All_Device_Notification, self).save(*args, **kwargs)
额外优化建议
建议将通知发送逻辑放到super().save()执行之后,避免出现通知发送成功但模型数据存储失败的不一致问题。
内容的提问来源于stack exchange,提问作者Kwall
相关产品推荐
相关产品推荐

