diff --git a/internal/push/fcm/push.go b/internal/push/fcm/push.go index 48da67f11..8a739335a 100644 --- a/internal/push/fcm/push.go +++ b/internal/push/fcm/push.go @@ -6,6 +6,7 @@ import ( "Open_IM/pkg/common/db" "Open_IM/pkg/common/log" "context" + go_redis "github.com/go-redis/redis/v8" "path/filepath" "strconv" @@ -85,6 +86,20 @@ func (f *Fcm) Push(accounts []string, title, detailContent, operationID string, if err == nil { apns.Payload.Aps.Badge = &unreadCountSum } else { + log.Error(operationID, "IncrUserBadgeUnreadCountSum redis err", err.Error(), uid) + Fail++ + continue + } + } else { + unreadCountSum, err := db.DB.GetUserBadgeUnreadCountSum(uid) + if err == nil && unreadCountSum != 0 { + apns.Payload.Aps.Badge = &unreadCountSum + } else if err == go_redis.Nil || unreadCountSum == 0 { + zero := 1 + apns.Payload.Aps.Badge = &zero + } else { + log.Error(operationID, "GetUserBadgeUnreadCountSum redis err", err.Error(), uid) + Fail++ continue } } diff --git a/pkg/common/db/RedisModel.go b/pkg/common/db/RedisModel.go index 95786fe6d..efd0db9a3 100644 --- a/pkg/common/db/RedisModel.go +++ b/pkg/common/db/RedisModel.go @@ -429,3 +429,8 @@ func (d *DataBases) SetUserBadgeUnreadCountSum(uid string, value int) error { key := userBadgeUnreadCountSum + uid return d.RDB.Set(context.Background(), key, value, 0).Err() } +func (d *DataBases) GetUserBadgeUnreadCountSum(uid string) (int, error) { + key := userBadgeUnreadCountSum + uid + seq, err := d.RDB.Get(context.Background(), key).Result() + return utils.StringToInt(seq), err +}