|
|
@@ -397,8 +397,7 @@ public class TrackingController {
|
|
|
|
|
|
Map<String, Object> device = new LinkedHashMap<>();
|
|
|
// S2S架构:腾讯服务器回调,真实用户IP通过参数传递,优先使用参数中的IP
|
|
|
- String paramIp = params.get("ip");
|
|
|
- device.put("ip", (paramIp != null && !paramIp.isBlank()) ? paramIp : clientIp(request));
|
|
|
+ putDeviceIp(device, params.get("ip"), params.get("ipv6"), clientIp(request));
|
|
|
// 优先使用真实设备UA,无则根据平台构造合理的移动设备UA
|
|
|
String ua = firstParam(params, "ua", "user_agent", "useragent");
|
|
|
if (ua == null || ua.isBlank()) {
|
|
|
@@ -458,6 +457,46 @@ public class TrackingController {
|
|
|
return "Mozilla/5.0 (Linux; Android 14; Pixel 8 Build/UQ1A.240205.002) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.6478.71 Mobile Safari/537.36";
|
|
|
}
|
|
|
|
|
|
+ private static void putDeviceIp(Map<String, Object> device, String ipv4Candidate, String ipv6Candidate, String fallbackIp) {
|
|
|
+ String ipv4 = normalizeIp(ipv4Candidate);
|
|
|
+ String ipv6 = normalizeIp(ipv6Candidate);
|
|
|
+ String fallback = normalizeIp(fallbackIp);
|
|
|
+ if (ipv4 == null && ipv6 == null && fallback != null) {
|
|
|
+ if (isIpv6(fallback)) {
|
|
|
+ ipv6 = fallback;
|
|
|
+ } else {
|
|
|
+ ipv4 = fallback;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (ipv4 != null && isIpv6(ipv4)) {
|
|
|
+ ipv6 = ipv4;
|
|
|
+ ipv4 = null;
|
|
|
+ }
|
|
|
+ if (ipv6 != null && !isIpv6(ipv6)) {
|
|
|
+ if (ipv4 == null) {
|
|
|
+ ipv4 = ipv6;
|
|
|
+ }
|
|
|
+ ipv6 = null;
|
|
|
+ }
|
|
|
+ if (ipv4 != null) {
|
|
|
+ device.put("ip", ipv4);
|
|
|
+ }
|
|
|
+ if (ipv6 != null) {
|
|
|
+ device.put("ipv6", ipv6);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private static String normalizeIp(String value) {
|
|
|
+ if (value == null || value.isBlank()) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ return value.trim();
|
|
|
+ }
|
|
|
+
|
|
|
+ private static boolean isIpv6(String value) {
|
|
|
+ return value != null && value.contains(":");
|
|
|
+ }
|
|
|
+
|
|
|
private Map<String, Object> baiduUidFromParams(Map<String, String> p) {
|
|
|
Map<String, Object> uid = new LinkedHashMap<>();
|
|
|
putUid(uid, "did", firstParam(p, "did", "imei"));
|