Files
backend/internal/pkg/jpush/vendor/text_renderer.go

62 lines
1.6 KiB
Go
Raw Normal View History

package vendor
import (
"with_you/internal/config"
"with_you/internal/pkg/jpush"
)
// defaultRenderer 默认通用文本渲染器
type defaultRenderer struct{}
func newDefaultRenderer() *defaultRenderer {
return &defaultRenderer{}
}
// mergeExtras 合并基础 extras 与额外 extras返回新 map
func mergeExtras(messageType string, extra map[string]any) map[string]any {
out := make(map[string]any, len(extra)+1)
if messageType != "" {
out["notification_type"] = messageType
}
for k, v := range extra {
out[k] = v
}
return out
}
// RenderAndroid 渲染 Android 通用通知
// 所有 Android 厂商共享alert/title/channel_id/extras/large_icon/priority
func (r *defaultRenderer) RenderAndroid(params MessageParams, cfg config.ChannelConfig) *jpush.AndroidNotif {
channelID := cfg.Chat
if params.Scene == SceneSystem {
channelID = cfg.System
}
return &jpush.AndroidNotif{
Alert: params.Body,
Title: params.Title,
ChannelID: channelID,
LargeIcon: params.LargeIcon,
Extras: mergeExtras(params.MessageType, params.Extra),
Priority: 1,
}
}
// RenderIOS 渲染 iOS 通用通知
// iOS 走 APNs通过 thread-id 实现按场景的通知分组
func (r *defaultRenderer) RenderIOS(params MessageParams, cfg config.ChannelConfig) *jpush.IOSNotif {
threadID := cfg.IOS.ChatThreadID
if params.Scene == SceneSystem {
threadID = cfg.IOS.SystemThreadID
}
return &jpush.IOSNotif{
Alert: map[string]any{
"title": params.Title,
"body": params.Body,
},
Sound: "default",
Badge: "+1",
ThreadID: threadID,
Extras: mergeExtras(params.MessageType, params.Extra),
}
}