diff --git a/internal/msg_gateway/gate/ws_server.go b/internal/msg_gateway/gate/ws_server.go index f631a6c33..9b61318b3 100644 --- a/internal/msg_gateway/gate/ws_server.go +++ b/internal/msg_gateway/gate/ws_server.go @@ -368,7 +368,11 @@ func (ws *WServer) getUserAllCons(uid string) map[int]*UserConn { rwLock.RLock() defer rwLock.RUnlock() if connMap, ok := ws.wsUserToConn[uid]; ok { - return connMap + newConnMap := make(map[int]*UserConn) + for k, v := range connMap { + newConnMap[k] = v + } + return newConnMap } return nil } diff --git a/internal/push/fcm/push.go b/internal/push/fcm/push.go index 99338e558..cedccbebe 100644 --- a/internal/push/fcm/push.go +++ b/internal/push/fcm/push.go @@ -7,11 +7,12 @@ import ( "Open_IM/pkg/common/log" "Open_IM/pkg/tools/splitter" "context" + "path/filepath" + "strconv" + firebase "firebase.google.com/go" "firebase.google.com/go/messaging" "google.golang.org/api/option" - "path/filepath" - "strconv" ) const SinglePushCountLimit = 400 @@ -67,6 +68,14 @@ func (f *Fcm) Push(accounts []string, alert, detailContent, operationID string, Msg.Notification = &messaging.Notification{} Msg.Notification.Body = detailContent Msg.Notification.Title = alert + Msg.APNS = &messaging.APNSConfig{Payload: &messaging.APNSPayload{Aps: &messaging.Aps{}}} + if opts.IOSBadgeCount { + i := 1 + Msg.APNS.Payload.Aps.Badge = &i + } + if opts.IOSPushSound != "" { + Msg.APNS.Payload.Aps.Sound = opts.IOSPushSound + } ctx := context.Background() for _, v := range result { Msg.Tokens = v.Item diff --git a/internal/push/logic/push_to_client.go b/internal/push/logic/push_to_client.go index e6e8fd6e4..13ea1bb68 100644 --- a/internal/push/logic/push_to_client.go +++ b/internal/push/logic/push_to_client.go @@ -21,8 +21,9 @@ import ( "Open_IM/pkg/utils" "context" "encoding/json" - "github.com/golang/protobuf/proto" "strings" + + "github.com/golang/protobuf/proto" ) type OpenIMContent struct { @@ -323,8 +324,9 @@ func GetOfflinePushOpts(pushMsg *pbPush.PushMsgReq) (opts push.PushOpts, err err opts.Signal.ClientMsgID = pushMsg.MsgData.ClientMsgID log.NewDebug(pushMsg.OperationID, opts) } - } + opts.IOSBadgeCount = pushMsg.MsgData.OfflinePushInfo.IOSBadgeCount + opts.IOSPushSound = pushMsg.MsgData.OfflinePushInfo.IOSPushSound return opts, nil } diff --git a/internal/push/push_interface.go b/internal/push/push_interface.go index a1d45d7b7..1e177e74e 100644 --- a/internal/push/push_interface.go +++ b/internal/push/push_interface.go @@ -5,7 +5,9 @@ type OfflinePusher interface { } type PushOpts struct { - Signal Signal + Signal Signal + IOSPushSound string + IOSBadgeCount bool } type Signal struct {