Matrix客户端推送通知:如何确保sender_display_name同步至推送网关?
解决方案
针对你的问题,无需修改Synapse,可通过调整客户端的推送配置和逻辑来确保sender_display_name等字段被包含在推送请求中,具体调整如下:
1. 自定义推送规则模板
Matrix的推送规则允许你指定推送内容的格式模板,强制Synapse携带所需元数据:
- 在客户端的推送规则(可通过
PUT /_matrix/client/v3/pushrules/{scope}/{kind}/{ruleId}接口更新)中,为目标规则添加format字段,使用模板语法明确引用sender_display_name。例如:{ "actions": [ "notify", { "set_tweak": "content", "value": "{{sender_display_name}}: {{content.body}}" } ] } - 确保规则中包含
{"set_tweak": "include_content", "value": true}的动作,允许Synapse传递事件相关的元数据到推送网关。
2. 优化设备推送注册参数
客户端在向homeserver注册推送设备时,可通过参数配置影响Synapse的推送行为:
- 调用
POST /_matrix/client/v3/pushers/set接口注册推送器时,在data字段中指定format参数为自定义格式(如org.matrix.custom),并附带模板内容,明确要求包含sender_display_name:{ "pushkey": "你的FCM推送密钥", "kind": "http", "app_id": "你的客户端ID", "data": { "url": "https://你的Sygnal网关地址", "format": "org.matrix.custom", "template": "{{sender_display_name}}发送了消息: {{content.body}}" } } - 部分homeserver可能默认限制推送内容,通过显式指定模板,可触发Synapse填充所需字段。
3. 客户端本地补充字段(兼容跨homeserver场景)
对于不支持自定义模板的homeserver,客户端可通过本地逻辑补充缺失的字段:
- 当收到仅包含
event_id的推送时,客户端立即调用GET /_matrix/client/v3/rooms/{roomId}/event/{eventId}接口拉取完整事件数据,从中提取sender_display_name并更新通知内容。 - 提前缓存用户通讯录中的显示名:客户端可定期同步用户的联系人列表,缓存
user_id与sender_display_name的映射关系,收到推送时直接通过user_id匹配缓存数据,快速补充通知信息。
内容的提问来源于stack exchange,提问作者Jordan Myers
相关产品推荐
相关产品推荐

