yumeng hai 2 semanas
pai
achega
7931f5a71d

+ 0 - 10
src/main/java/com/adx/tencent/AppConfiguration.java

@@ -296,19 +296,15 @@ public class AppConfiguration {
 
         Map<String, HonorPlacement.HonorAppPlacement> platforms = new HashMap<>();
         String honorAndroidAppId = props.getBaiduAndroidAppId();
-        List<String> honorAndroidTagIds = props.getBaiduAndroidTagIds();
         if (honorAndroidAppId != null && !honorAndroidAppId.isBlank()) {
             HonorPlacement.HonorAppPlacement android = new HonorPlacement.HonorAppPlacement();
             android.setAppId(honorAndroidAppId);
-            android.setTagIds(honorAndroidTagIds);
             platforms.put("android", android);
         }
         String honorIosAppId = props.getBaiduIosAppId();
-        List<String> honorIosTagIds = props.getBaiduIosTagIds();
         if (honorIosAppId != null && !honorIosAppId.isBlank()) {
             HonorPlacement.HonorAppPlacement ios = new HonorPlacement.HonorAppPlacement();
             ios.setAppId(honorIosAppId);
-            ios.setTagIds(honorIosTagIds);
             platforms.put("ios", ios);
         }
         if (!platforms.isEmpty()) p.setPlatforms(platforms);
@@ -372,13 +368,11 @@ public class AppConfiguration {
         if (props.getBaiduAndroidAppId() != null && !props.getBaiduAndroidAppId().isBlank()) {
             KuaishouPlacement.KuaishouAppPlacement android = new KuaishouPlacement.KuaishouAppPlacement();
             android.setAppId(props.getBaiduAndroidAppId());
-            android.setTagIds(props.getBaiduAndroidTagIds());
             platforms.put("android", android);
         }
         if (props.getBaiduIosAppId() != null && !props.getBaiduIosAppId().isBlank()) {
             KuaishouPlacement.KuaishouAppPlacement ios = new KuaishouPlacement.KuaishouAppPlacement();
             ios.setAppId(props.getBaiduIosAppId());
-            ios.setTagIds(props.getBaiduIosTagIds());
             platforms.put("ios", ios);
         }
         if (!platforms.isEmpty()) p.setPlatforms(platforms);
@@ -443,13 +437,11 @@ public class AppConfiguration {
         if (props.getBaiduAndroidAppId() != null && !props.getBaiduAndroidAppId().isBlank()) {
             VivoPlacement.VivoAppPlacement android = new VivoPlacement.VivoAppPlacement();
             android.setAppId(props.getBaiduAndroidAppId());
-            android.setTagIds(props.getBaiduAndroidTagIds());
             platforms.put("android", android);
         }
         if (props.getBaiduIosAppId() != null && !props.getBaiduIosAppId().isBlank()) {
             VivoPlacement.VivoAppPlacement ios = new VivoPlacement.VivoAppPlacement();
             ios.setAppId(props.getBaiduIosAppId());
-            ios.setTagIds(props.getBaiduIosTagIds());
             platforms.put("ios", ios);
         }
         if (!platforms.isEmpty()) p.setPlatforms(platforms);
@@ -719,13 +711,11 @@ public class AppConfiguration {
         if (props.getBaiduAndroidAppId() != null && !props.getBaiduAndroidAppId().isBlank()) {
             MediaPlacement.BaiduAppPlacement android = new MediaPlacement.BaiduAppPlacement();
             android.setAppId(props.getBaiduAndroidAppId());
-            android.setTagIds(props.getBaiduAndroidTagIds());
             platforms.put("android", android);
         }
         if (props.getBaiduIosAppId() != null && !props.getBaiduIosAppId().isBlank()) {
             MediaPlacement.BaiduAppPlacement ios = new MediaPlacement.BaiduAppPlacement();
             ios.setAppId(props.getBaiduIosAppId());
-            ios.setTagIds(props.getBaiduIosTagIds());
             platforms.put("ios", ios);
         }
         if (!platforms.isEmpty()) p.setPlatforms(platforms);

+ 0 - 19
src/main/java/com/adx/tencent/config/AppProperties.java

@@ -4,7 +4,6 @@ import org.springframework.boot.context.properties.ConfigurationProperties;
 import org.springframework.stereotype.Component;
 
 import java.time.Duration;
-import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -32,9 +31,7 @@ public class AppProperties {
     private String baiduAppId;
     private String baiduTagId;
     private String baiduAndroidAppId;
-    private List<String> baiduAndroidTagIds = new ArrayList<>();
     private String baiduIosAppId;
-    private List<String> baiduIosTagIds = new ArrayList<>();
     private long baiduBidFloor = 0;
     private int baiduActionType = 1;
     private int baiduTrackingMaxRedirects = 20;
@@ -275,14 +272,6 @@ public class AppProperties {
         this.baiduAndroidAppId = v;
     }
 
-    public List<String> getBaiduAndroidTagIds() {
-        return baiduAndroidTagIds;
-    }
-
-    public void setBaiduAndroidTagIds(List<String> v) {
-        this.baiduAndroidTagIds = v;
-    }
-
     public String getBaiduIosAppId() {
         return baiduIosAppId;
     }
@@ -291,14 +280,6 @@ public class AppProperties {
         this.baiduIosAppId = v;
     }
 
-    public List<String> getBaiduIosTagIds() {
-        return baiduIosTagIds;
-    }
-
-    public void setBaiduIosTagIds(List<String> v) {
-        this.baiduIosTagIds = v;
-    }
-
     public long getBaiduBidFloor() {
         return baiduBidFloor;
     }

+ 41 - 26
src/main/java/com/adx/tencent/honor/service/HonorPlacement.java

@@ -28,12 +28,12 @@ public class HonorPlacement {
     public Resolved resolve(Map<String, String> params) {
         String tagId = firstParam(params, "tagId", "tag_id", "baidu_tag_id");
         if (tagId != null && !tagId.isBlank()) {
-            Resolved r = resolveByTagId(tagId);
+            Resolved r = resolveAnyTagByPlatform(tagId, inferPlatform(params));
             if (r != null) return r;
-            throw new IllegalArgumentException("unknown honor baidu tag id: " + tagId);
+            throw new IllegalArgumentException("missing honor appId for baidu tag id: " + tagId);
         }
 
-        String platform = normalizePlatform(firstParam(params, "platform", "os", "system", "device_os"));
+        String platform = inferPlatform(params);
         if (platform != null && !platform.isBlank()) {
             Resolved r = resolveByPlatform(platform);
             if (r != null) return r;
@@ -54,32 +54,26 @@ public class HonorPlacement {
         throw new IllegalArgumentException("missing honor tagId or platform");
     }
 
-    private Resolved resolveByTagId(String tagId) {
-        if (platforms != null) {
-            for (Map.Entry<String, HonorAppPlacement> e : platforms.entrySet()) {
-                HonorAppPlacement p = e.getValue();
-                if (p.getAppId() != null && p.getTagIds() != null && p.getTagIds().contains(tagId)) {
-                    return new Resolved(e.getKey(), p.getAppId(), tagId);
-                }
-            }
-        }
-        if (baiduAppId != null && tagId.equals(baiduTagId)) {
-            return new Resolved(null, baiduAppId, baiduTagId);
-        }
-        return null;
-    }
-
     private Resolved resolveByPlatform(String platform) {
         if (platforms == null) return null;
         HonorAppPlacement p = platforms.get(platform);
-        if (p == null || p.getAppId() == null || p.getTagIds() == null || p.getTagIds().isEmpty()) {
+        if (p == null || p.getAppId() == null || p.getAppId().isBlank() || baiduTagId == null || baiduTagId.isBlank()) {
             return null;
         }
-        if (p.getTagIds().size() > 1) {
-            throw new IllegalArgumentException(
-                    "tagId is required for honor platform " + platform + " because multiple tag ids are configured");
+        return new Resolved(platform, p.getAppId(), baiduTagId);
+    }
+
+    private Resolved resolveAnyTagByPlatform(String tagId, String platform) {
+        if (platform != null && !platform.isBlank() && platforms != null) {
+            HonorAppPlacement p = platforms.get(platform);
+            if (p != null && p.getAppId() != null && !p.getAppId().isBlank()) {
+                return new Resolved(platform, p.getAppId(), tagId);
+            }
+        }
+        if (baiduAppId != null && !baiduAppId.isBlank()) {
+            return new Resolved(platform, baiduAppId, tagId);
         }
-        return new Resolved(platform, p.getAppId(), p.getTagIds().get(0));
+        return null;
     }
 
     private static String firstParam(Map<String, String> p, String... keys) {
@@ -100,13 +94,34 @@ public class HonorPlacement {
         };
     }
 
+    private static String inferPlatform(Map<String, String> params) {
+        String platform = normalizePlatform(firstParam(params, "platform", "os", "system", "device_os"));
+        if (platform != null) {
+            return platform;
+        }
+        if (hasAny(params, "idfaMD5", "idfa_md5", "idfaSHA1", "idfa_sha1", "idfa", "kenyid_caa", "kenyIdCaa", "caid")) {
+            return "ios";
+        }
+        if (hasAny(params, "oaidMD5", "oaid_md5", "oaid", "imeiMD5", "imei_md5", "imei", "androidIdMD5", "android_id_md5", "androidid", "androidId", "android_id")) {
+            return "android";
+        }
+        return null;
+    }
+
+    private static boolean hasAny(Map<String, String> params, String... keys) {
+        for (String key : keys) {
+            String value = params.get(key);
+            if (value != null && !value.isBlank()) {
+                return true;
+            }
+        }
+        return false;
+    }
+
     public static class HonorAppPlacement {
         private String appId;
-        private List<String> tagIds;
         public String getAppId() { return appId; }
         public void setAppId(String v) { this.appId = v; }
-        public List<String> getTagIds() { return tagIds; }
-        public void setTagIds(List<String> v) { this.tagIds = v; }
     }
 
     public record Resolved(String platform, String appId, String tagId) {}

+ 42 - 28
src/main/java/com/adx/tencent/httpapi/MediaPlacement.java

@@ -40,12 +40,12 @@ public class MediaPlacement {
     public Resolved resolve(Map<String, String> params) {
         String tagId = firstParam(params, "baidu_tag_id", "tag_id", "tagid");
         if (tagId != null && !tagId.isBlank()) {
-            Resolved r = resolveByTagId(tagId);
+            Resolved r = resolveAnyTagByPlatform(tagId, inferPlatform(params));
             if (r != null) return r;
-            throw new IllegalArgumentException("unknown baidu tag id: " + tagId);
+            throw new IllegalArgumentException("missing baidu appId for tag id: " + tagId);
         }
 
-        String platform = normalizePlatform(firstParam(params, "platform", "os", "system", "device_os"));
+        String platform = inferPlatform(params);
         if (platform != null && !platform.isBlank()) {
             Resolved r = resolveByPlatform(platform);
             if (r != null) return r;
@@ -66,33 +66,26 @@ public class MediaPlacement {
         throw new IllegalArgumentException("missing baidu_tag_id or platform");
     }
 
-    private Resolved resolveByTagId(String tagId) {
-        if (platforms != null) {
-            for (Map.Entry<String, BaiduAppPlacement> e : platforms.entrySet()) {
-                BaiduAppPlacement p = e.getValue();
-                if (p.getAppId() != null && p.getTagIds() != null && p.getTagIds().contains(tagId)) {
-                    return new Resolved(e.getKey(), p.getAppId(), tagId);
-                }
-            }
-        }
-        if (baiduAppId != null && tagId.equals(baiduTagId)) {
-            return new Resolved(null, baiduAppId, baiduTagId);
-        }
-        return null;
-    }
-
     private Resolved resolveByPlatform(String platform) {
         if (platforms == null) return null;
         BaiduAppPlacement p = platforms.get(platform);
-        if (p == null || p.getAppId() == null || p.getTagIds() == null || p.getTagIds().isEmpty()) {
+        if (p == null || p.getAppId() == null || p.getAppId().isBlank() || baiduTagId == null || baiduTagId.isBlank()) {
             return null;
         }
-        if (p.getTagIds().size() > 1) {
-            throw new IllegalArgumentException(
-                    "baidu_tag_id is required for platform " + platform
-                    + " because multiple tag ids are configured");
+        return new Resolved(platform, p.getAppId(), baiduTagId);
+    }
+
+    private Resolved resolveAnyTagByPlatform(String tagId, String platform) {
+        if (platform != null && !platform.isBlank() && platforms != null) {
+            BaiduAppPlacement p = platforms.get(platform);
+            if (p != null && p.getAppId() != null && !p.getAppId().isBlank()) {
+                return new Resolved(platform, p.getAppId(), tagId);
+            }
+        }
+        if (baiduAppId != null && !baiduAppId.isBlank()) {
+            return new Resolved(platform, baiduAppId, tagId);
         }
-        return new Resolved(platform, p.getAppId(), p.getTagIds().get(0));
+        return null;
     }
 
     private static String firstParam(Map<String, String> p, String... keys) {
@@ -108,20 +101,41 @@ public class MediaPlacement {
         if (value == null) return null;
         return switch (value.toLowerCase().trim()) {
             case "ios", "iphone", "ipad", "1" -> "ios";
-            case "android", "安卓", "2" -> "android";
+            case "android", "安卓", "0", "2" -> "android";
             default -> null;
         };
     }
 
+    private static String inferPlatform(Map<String, String> params) {
+        String platform = normalizePlatform(firstParam(params, "platform", "os", "system", "device_os"));
+        if (platform != null) {
+            return platform;
+        }
+        if (hasAny(params, "idfaMD5", "idfa_md5", "idfaSHA1", "idfa_sha1", "idfa", "kenyid_caa", "kenyIdCaa", "caid")) {
+            return "ios";
+        }
+        if (hasAny(params, "oaidMD5", "oaid_md5", "oaid", "imeiMD5", "imei_md5", "imei", "androidIdMD5", "android_id_md5", "androidid", "androidId", "android_id")) {
+            return "android";
+        }
+        return null;
+    }
+
+    private static boolean hasAny(Map<String, String> params, String... keys) {
+        for (String key : keys) {
+            String value = params.get(key);
+            if (value != null && !value.isBlank()) {
+                return true;
+            }
+        }
+        return false;
+    }
+
     // ─── 嵌套类型 ─────────────────────────────────────────────────────────────
 
     public static class BaiduAppPlacement {
         private String appId;
-        private List<String> tagIds;
         public String getAppId() { return appId; }
         public void setAppId(String v) { this.appId = v; }
-        public List<String> getTagIds() { return tagIds; }
-        public void setTagIds(List<String> v) { this.tagIds = v; }
     }
 
     /** 解析结果(对应 Go resolvedMediaPlacement) */

+ 16 - 25
src/main/java/com/adx/tencent/kuaishou/service/KuaishouPlacement.java

@@ -28,9 +28,9 @@ public class KuaishouPlacement {
     public Resolved resolve(Map<String, String> params) {
         String tagId = firstParam(params, "tagId", "tag_id", "baidu_tag_id");
         if (tagId != null && !tagId.isBlank()) {
-            Resolved r = resolveByTagId(tagId);
+            Resolved r = resolveAnyTagByPlatform(tagId, inferPlatform(params));
             if (r != null) return r;
-            throw new IllegalArgumentException("unknown kuaishou baidu tag id: " + tagId);
+            throw new IllegalArgumentException("missing kuaishou appId for baidu tag id: " + tagId);
         }
 
         String platform = inferPlatform(params);
@@ -54,32 +54,26 @@ public class KuaishouPlacement {
         throw new IllegalArgumentException("missing kuaishou tagId or platform");
     }
 
-    private Resolved resolveByTagId(String tagId) {
-        if (platforms != null) {
-            for (Map.Entry<String, KuaishouAppPlacement> e : platforms.entrySet()) {
-                KuaishouAppPlacement p = e.getValue();
-                if (p.getAppId() != null && p.getTagIds() != null && p.getTagIds().contains(tagId)) {
-                    return new Resolved(e.getKey(), p.getAppId(), tagId);
-                }
-            }
-        }
-        if (baiduAppId != null && tagId.equals(baiduTagId)) {
-            return new Resolved(null, baiduAppId, baiduTagId);
-        }
-        return null;
-    }
-
     private Resolved resolveByPlatform(String platform) {
         if (platforms == null) return null;
         KuaishouAppPlacement p = platforms.get(platform);
-        if (p == null || p.getAppId() == null || p.getTagIds() == null || p.getTagIds().isEmpty()) {
+        if (p == null || p.getAppId() == null || p.getAppId().isBlank() || baiduTagId == null || baiduTagId.isBlank()) {
             return null;
         }
-        if (p.getTagIds().size() > 1) {
-            throw new IllegalArgumentException(
-                    "tagId is required for kuaishou platform " + platform + " because multiple tag ids are configured");
+        return new Resolved(platform, p.getAppId(), baiduTagId);
+    }
+
+    private Resolved resolveAnyTagByPlatform(String tagId, String platform) {
+        if (platform != null && !platform.isBlank() && platforms != null) {
+            KuaishouAppPlacement p = platforms.get(platform);
+            if (p != null && p.getAppId() != null && !p.getAppId().isBlank()) {
+                return new Resolved(platform, p.getAppId(), tagId);
+            }
+        }
+        if (baiduAppId != null && !baiduAppId.isBlank()) {
+            return new Resolved(platform, baiduAppId, tagId);
         }
-        return new Resolved(platform, p.getAppId(), p.getTagIds().get(0));
+        return null;
     }
 
     private static String firstParam(Map<String, String> p, String... keys) {
@@ -126,11 +120,8 @@ public class KuaishouPlacement {
 
     public static class KuaishouAppPlacement {
         private String appId;
-        private List<String> tagIds;
         public String getAppId() { return appId; }
         public void setAppId(String v) { this.appId = v; }
-        public List<String> getTagIds() { return tagIds; }
-        public void setTagIds(List<String> v) { this.tagIds = v; }
     }
 
     public record Resolved(String platform, String appId, String tagId) {}

+ 16 - 25
src/main/java/com/adx/tencent/vivo/service/VivoPlacement.java

@@ -28,9 +28,9 @@ public class VivoPlacement {
     public Resolved resolve(Map<String, String> params) {
         String tagId = firstParam(params, "tagId", "tag_id", "baidu_tag_id");
         if (tagId != null && !tagId.isBlank()) {
-            Resolved r = resolveByTagId(tagId);
+            Resolved r = resolveAnyTagByPlatform(tagId, inferPlatform(params));
             if (r != null) return r;
-            throw new IllegalArgumentException("unknown vivo baidu tag id: " + tagId);
+            throw new IllegalArgumentException("missing vivo appId for baidu tag id: " + tagId);
         }
 
         String platform = inferPlatform(params);
@@ -54,32 +54,26 @@ public class VivoPlacement {
         throw new IllegalArgumentException("missing vivo tagId or platform");
     }
 
-    private Resolved resolveByTagId(String tagId) {
-        if (platforms != null) {
-            for (Map.Entry<String, VivoAppPlacement> e : platforms.entrySet()) {
-                VivoAppPlacement p = e.getValue();
-                if (p.getAppId() != null && p.getTagIds() != null && p.getTagIds().contains(tagId)) {
-                    return new Resolved(e.getKey(), p.getAppId(), tagId);
-                }
-            }
-        }
-        if (baiduAppId != null && tagId.equals(baiduTagId)) {
-            return new Resolved(null, baiduAppId, baiduTagId);
-        }
-        return null;
-    }
-
     private Resolved resolveByPlatform(String platform) {
         if (platforms == null) return null;
         VivoAppPlacement p = platforms.get(platform);
-        if (p == null || p.getAppId() == null || p.getTagIds() == null || p.getTagIds().isEmpty()) {
+        if (p == null || p.getAppId() == null || p.getAppId().isBlank() || baiduTagId == null || baiduTagId.isBlank()) {
             return null;
         }
-        if (p.getTagIds().size() > 1) {
-            throw new IllegalArgumentException(
-                    "tagId is required for vivo platform " + platform + " because multiple tag ids are configured");
+        return new Resolved(platform, p.getAppId(), baiduTagId);
+    }
+
+    private Resolved resolveAnyTagByPlatform(String tagId, String platform) {
+        if (platform != null && !platform.isBlank() && platforms != null) {
+            VivoAppPlacement p = platforms.get(platform);
+            if (p != null && p.getAppId() != null && !p.getAppId().isBlank()) {
+                return new Resolved(platform, p.getAppId(), tagId);
+            }
+        }
+        if (baiduAppId != null && !baiduAppId.isBlank()) {
+            return new Resolved(platform, baiduAppId, tagId);
         }
-        return new Resolved(platform, p.getAppId(), p.getTagIds().get(0));
+        return null;
     }
 
     private static String firstParam(Map<String, String> p, String... keys) {
@@ -126,11 +120,8 @@ public class VivoPlacement {
 
     public static class VivoAppPlacement {
         private String appId;
-        private List<String> tagIds;
         public String getAppId() { return appId; }
         public void setAppId(String v) { this.appId = v; }
-        public List<String> getTagIds() { return tagIds; }
-        public void setTagIds(List<String> v) { this.tagIds = v; }
     }
 
     public record Resolved(String platform, String appId, String tagId) {}

+ 0 - 2
src/main/resources/application.yml

@@ -22,9 +22,7 @@ adx:
   baidu-auction-price-i-key: ee64e8c430a2510e
   baidu-media-id: 1213
   baidu-android-app-id: dcb4cbec
-  baidu-android-tag-ids: jlt52,jlt53,jlt54,jlt55,jlt56,jlt57,jlt58,jlt59,jlt60,jlt61,jlt62,jlt63,jlt64,jlt65,jlt66,jlt67,jlt68,jlt69,jlt70,jlt71,jlt72,jlt73,jlt74,jlt75,jlt76,jlt77,jlt78,jlt79,jlt80,jlt81,jlt82,jlt83,jlt84,jlt85,jlt86,jlt87,jlt88,jlt89,jlt90,jlt91,jlt92,jlt93,jlt94,jlt95,jlt96,jlt97,jlt98,jlt99,jlt100,jlt101
   baidu-ios-app-id: efff0562
-  baidu-ios-tag-ids: jlt01,jlt03,jlt04,jlt05,jlt06,jlt07,jlt08,jlt09,jlt10,jlt11,jlt12,jlt13,jlt14,jlt15,jlt16,jlt17,jlt18,jlt19,jlt20,jlt21,jlt22,jlt23,jlt24,jlt25,jlt26,jlt27,jlt28,jlt29,jlt30,jlt31,jlt32,jlt33,jlt34,jlt35,jlt36,jlt37,jlt38,jlt39,jlt40,jlt41,jlt42,jlt43,jlt44,jlt45,jlt46,jlt47,jlt48,jlt49,jlt50,jlt51
   rta-enabled: true
   rta-endpoint: "https://rta-gateway.baidu.com:443/rta-proxy"
   rta-timeout: 8000ms