fix(analytics): UTM from query string, iOS before macOS detection, remove dead referer fallback

main
boban 2026-05-16 01:00:10 +02:00
parent 66e559173c
commit 86f767a626
2 changed files with 10 additions and 8 deletions

View File

@ -20,6 +20,7 @@ class RecordClickJob implements ShouldQueue
public readonly string $ip,
public readonly ?string $userAgent,
public readonly array $headers,
public readonly array $queryParams = [],
) {}
public function handle(): void
@ -40,10 +41,10 @@ class RecordClickJob implements ShouldQueue
'device' => $device,
'os' => $this->detectOs($this->userAgent ?? ''),
'browser' => $this->detectBrowser($this->userAgent ?? ''),
'referrer_host' => $this->extractHost($this->headers['referer'][0] ?? $this->headers['Referer'][0] ?? null),
'utm_source' => $this->headers['utm_source'][0] ?? null,
'utm_medium' => $this->headers['utm_medium'][0] ?? null,
'utm_campaign' => $this->headers['utm_campaign'][0] ?? null,
'referrer_host' => $this->extractHost($this->headers['referer'][0] ?? null),
'utm_source' => $this->queryParams['utm_source'] ?? null,
'utm_medium' => $this->queryParams['utm_medium'] ?? null,
'utm_campaign' => $this->queryParams['utm_campaign'] ?? null,
'language' => substr($this->headers['accept-language'][0] ?? 'de', 0, 10),
]);
@ -82,10 +83,10 @@ class RecordClickJob implements ShouldQueue
private function detectOs(string $ua): ?string
{
if (stripos($ua, 'Windows') !== false) return 'windows';
if (stripos($ua, 'Mac OS') !== false) return 'macos';
if (stripos($ua, 'iPhone') !== false || stripos($ua, 'iPad') !== false) return 'ios';
if (stripos($ua, 'Android') !== false) return 'android';
if (stripos($ua, 'Windows') !== false) return 'windows';
if (stripos($ua, 'Mac OS') !== false) return 'macos';
if (stripos($ua, 'Linux') !== false) return 'linux';
return null;
}

View File

@ -44,9 +44,10 @@ class RedirectController extends Controller
// 4. RecordClickJob dispatched in Task 7
\App\Domains\Analytics\Jobs\RecordClickJob::dispatch(
(int) $data['link_id'],
$request->ip(),
$request->ip() ?? '',
$request->userAgent() ?? '',
$request->headers->all()
$request->headers->all(),
$request->query(),
)->onQueue('clicks');
// 5. 302 redirect