diff --git a/tenant-service/src/main/java/com/xuqm/tenant/controller/SdkConfigController.java b/tenant-service/src/main/java/com/xuqm/tenant/controller/SdkConfigController.java index 3b35cee..55c97c9 100644 --- a/tenant-service/src/main/java/com/xuqm/tenant/controller/SdkConfigController.java +++ b/tenant-service/src/main/java/com/xuqm/tenant/controller/SdkConfigController.java @@ -77,10 +77,22 @@ public class SdkConfigController { .findByAppKeyAndPlatformAndServiceType(app.getAppKey(), platform, FeatureServiceEntity.ServiceType.UPDATE) .map(feature -> parseConfig(feature.getConfig())) .orElseGet(objectMapper::createObjectNode); - JsonNode pushConfig = featureServiceRepository + // schemaV2 格式存储时 vendors 在嵌套层,客户端 SDK 读的是顶层 xiaomi/huawei 等字段,需解包 + JsonNode rawPushConfig = featureServiceRepository .findByAppKeyAndPlatformAndServiceType(app.getAppKey(), platform, FeatureServiceEntity.ServiceType.PUSH) .map(feature -> parseConfig(feature.getConfig())) .orElseGet(objectMapper::createObjectNode); + JsonNode pushConfig; + if (rawPushConfig.has("vendors") && rawPushConfig.path("vendors").isObject()) { + com.fasterxml.jackson.databind.node.ObjectNode flat = objectMapper.createObjectNode(); + rawPushConfig.path("vendors").fields().forEachRemaining(e -> flat.set(e.getKey(), e.getValue())); + if (rawPushConfig.has("profiles")) { + flat.set("profiles", rawPushConfig.get("profiles")); + } + pushConfig = flat; + } else { + pushConfig = rawPushConfig; + } boolean updateEnabled = deployProps.isEnableUpdate() && featureServiceRepository .findByAppKeyAndPlatformAndServiceType(app.getAppKey(), platform, FeatureServiceEntity.ServiceType.UPDATE) .map(FeatureServiceEntity::isEnabled) diff --git a/tenant-service/src/main/java/com/xuqm/tenant/service/FeatureServiceManager.java b/tenant-service/src/main/java/com/xuqm/tenant/service/FeatureServiceManager.java index 901056d..7f820c9 100644 --- a/tenant-service/src/main/java/com/xuqm/tenant/service/FeatureServiceManager.java +++ b/tenant-service/src/main/java/com/xuqm/tenant/service/FeatureServiceManager.java @@ -270,7 +270,19 @@ public class FeatureServiceManager { return services.get(0); } - FeatureServiceEntity entity = getOrFail(appKey, platform, serviceType); + // PUSH / UPDATE:允许在服务未激活时提前保存配置(upsert) + FeatureServiceEntity entity = repository + .findByAppKeyAndPlatformAndServiceType(appKey, platform, serviceType) + .orElseGet(() -> { + FeatureServiceEntity created = new FeatureServiceEntity(); + created.setId(java.util.UUID.randomUUID().toString()); + created.setAppKey(appKey); + created.setPlatform(platform); + created.setServiceType(serviceType); + created.setEnabled(false); + created.setCreatedAt(java.time.LocalDateTime.now()); + return created; + }); entity.setConfig(config); return repository.save(entity); }