From 02eddb6010f0ce2e53848f45a36c23492e4ff41e Mon Sep 17 00:00:00 2001 From: richjohnrambo Date: Mon, 14 Sep 2026 17:34:12 +0800 Subject: [PATCH] fix: accept jpush token metadata fields --- server/db/mysql/adapter.go | 3 +++ server/db/mysql/tenant_adapter.go | 13 +++++++---- server/im_http.go | 39 +++++++++++++++++++------------ server/store/types/profile.go | 19 ++++++++------- 4 files changed, 47 insertions(+), 27 deletions(-) diff --git a/server/db/mysql/adapter.go b/server/db/mysql/adapter.go index fc5deb8..40476a9 100644 --- a/server/db/mysql/adapter.go +++ b/server/db/mysql/adapter.go @@ -1372,6 +1372,9 @@ func createIMUserProductTables(tx *sql.Tx) error { token VARCHAR(512) NOT NULL, app_version VARCHAR(64) NOT NULL DEFAULT '', platform VARCHAR(32) NOT NULL DEFAULT '', + sdk_version VARCHAR(64) NOT NULL DEFAULT '', + push_env VARCHAR(32) NOT NULL DEFAULT '', + notification_permission VARCHAR(32) NOT NULL DEFAULT '', created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3), PRIMARY KEY(id), diff --git a/server/db/mysql/tenant_adapter.go b/server/db/mysql/tenant_adapter.go index 31c2331..7c710e9 100644 --- a/server/db/mysql/tenant_adapter.go +++ b/server/db/mysql/tenant_adapter.go @@ -6281,16 +6281,21 @@ func (a *adapter) TenantDevicePushTokenUpsert(id t.TenantID, token *t.DevicePush token.Token = strings.TrimSpace(token.Token) token.AppVersion = strings.TrimSpace(token.AppVersion) token.Platform = strings.ToLower(strings.TrimSpace(token.Platform)) + token.SDKVersion = strings.TrimSpace(token.SDKVersion) + token.PushEnv = strings.ToLower(strings.TrimSpace(token.PushEnv)) + token.NotificationPermission = strings.ToLower(strings.TrimSpace(token.NotificationPermission)) tokenID, err := nextSnowflakeID() if err != nil { return nil, err } _, err = a.db.ExecContext(ctx, - `INSERT INTO im_device_push_tokens(id,device_id,user_id,provider,token,app_version,platform,created_at,updated_at) - VALUES(?,?,?,?,?,?,?,?,?) + `INSERT INTO im_device_push_tokens(id,device_id,user_id,provider,token,app_version,platform,sdk_version,push_env,notification_permission,created_at,updated_at) + VALUES(?,?,?,?,?,?,?,?,?,?,?,?) ON DUPLICATE KEY UPDATE device_id=VALUES(device_id),user_id=VALUES(user_id),provider=VALUES(provider),token=VALUES(token), - app_version=VALUES(app_version),platform=VALUES(platform),updated_at=VALUES(updated_at)`, - tokenID, token.DeviceID, decodeUID(token.UserID), token.Provider, token.Token, token.AppVersion, token.Platform, now, now) + app_version=VALUES(app_version),platform=VALUES(platform),sdk_version=VALUES(sdk_version),push_env=VALUES(push_env), + notification_permission=VALUES(notification_permission),updated_at=VALUES(updated_at)`, + tokenID, token.DeviceID, decodeUID(token.UserID), token.Provider, token.Token, token.AppVersion, token.Platform, + token.SDKVersion, token.PushEnv, token.NotificationPermission, now, now) if err != nil { return nil, err } diff --git a/server/im_http.go b/server/im_http.go index 9c88209..b02bc47 100644 --- a/server/im_http.go +++ b/server/im_http.go @@ -319,10 +319,13 @@ type imYouthModeEnableRequest struct { } type imDevicePushTokenRequest struct { - Provider string `json:"provider"` - Token string `json:"token"` - AppVersion string `json:"app_version,omitempty"` - Platform string `json:"platform,omitempty"` + Provider string `json:"provider"` + Token string `json:"token"` + AppVersion string `json:"app_version,omitempty"` + Platform string `json:"platform,omitempty"` + SDKVersion string `json:"sdk_version,omitempty"` + PushEnv string `json:"push_env,omitempty"` + NotificationPermission string `json:"notification_permission,omitempty"` } type imP2PConversationRequest struct { @@ -3356,12 +3359,15 @@ func serveIMDevicePushToken(wrt http.ResponseWriter, req *http.Request) { return } token, err := store.DevicePushTokens.Upsert(principal.TenantID, &types.DevicePushToken{ - UserID: principal.Uid, - DeviceID: deviceID, - Provider: body.Provider, - Token: body.Token, - AppVersion: body.AppVersion, - Platform: body.Platform, + UserID: principal.Uid, + DeviceID: deviceID, + Provider: body.Provider, + Token: body.Token, + AppVersion: body.AppVersion, + Platform: body.Platform, + SDKVersion: body.SDKVersion, + PushEnv: body.PushEnv, + NotificationPermission: body.NotificationPermission, }) if err != nil { writeIMRelationError(wrt, req, err) @@ -9664,11 +9670,14 @@ func youthModeRestrictionItems(restrictions []string) []map[string]any { func devicePushTokenPayload(token *types.DevicePushToken) map[string]any { return map[string]any{ - "device_id": token.DeviceID, - "provider": token.Provider, - "app_version": token.AppVersion, - "platform": token.Platform, - "updated_at": token.UpdatedAt.UTC().Format(time.RFC3339Nano), + "device_id": token.DeviceID, + "provider": token.Provider, + "app_version": token.AppVersion, + "platform": token.Platform, + "sdk_version": token.SDKVersion, + "push_env": token.PushEnv, + "notification_permission": token.NotificationPermission, + "updated_at": token.UpdatedAt.UTC().Format(time.RFC3339Nano), } } diff --git a/server/store/types/profile.go b/server/store/types/profile.go index f7d3119..3d8decb 100644 --- a/server/store/types/profile.go +++ b/server/store/types/profile.go @@ -79,12 +79,15 @@ type YouthModeSettings struct { } type DevicePushToken struct { - UserID Uid - DeviceID string - Provider string - Token string - AppVersion string - Platform string - UpdatedAt time.Time - CreatedAt time.Time + UserID Uid + DeviceID string + Provider string + Token string + AppVersion string + Platform string + SDKVersion string + PushEnv string + NotificationPermission string + UpdatedAt time.Time + CreatedAt time.Time }