PHP如何检测来自WhatsApp等应用内链接跳转的访问来源
PHP识别客户端App内跳转来源的实现方案
常规网页跳转场景下确实可以通过$_SERVER['HTTP_REFERER']获取来源,但主流即时通讯App的内嵌WebView默认不会传递带App标识的Referer值,仅靠这个参数无法识别WhatsApp、Telegram、Messenger这类渠道,可通过以下多层方案组合实现识别:
1. User-Agent特征匹配(通用兜底方案)
各App的内嵌WebView发起请求时,会在User-Agent(UA)字符串中携带专属标识,这是无参数场景下覆盖率最高的识别方式,常见App的UA特征如下:
- WhatsApp:iOS/安卓端UA均包含
WhatsApp字段,部分旧版本会携带FB_IAB/WA4B(Facebook系内嵌浏览器的WhatsApp专属标记) - Telegram:UA包含
Telegram字段,部分桌面端版本会携带TgWeb标识 - Facebook Messenger:UA包含
Messenger字段,同时会携带Facebook系App通用的FB_IAB标记 - 微信/QQ:微信UA包含
MicroMessenger,QQ UA包含QQ/专属字段
PHP端实现示例:
$userAgent = $_SERVER['HTTP_USER_AGENT'] ?? ''; $trafficSource = 'unknown'; // 匹配WhatsApp if (stripos($userAgent, 'WhatsApp') !== false || strpos($userAgent, 'WA4B') !== false) { $trafficSource = 'whatsapp'; } // 匹配Telegram elseif (stripos($userAgent, 'Telegram') !== false) { $trafficSource = 'telegram'; } // 匹配Messenger elseif (stripos($userAgent, 'Messenger') !== false) { $trafficSource = 'messenger'; }
注意:UA可被手动篡改,该方案仅适用于普通流量统计场景,不能作为防刷、权益发放类场景的唯一判断依据。
2. 自定义UTM参数标记(准确率100%的方案)
如果是你自己可控的分享链路(比如站内生成的分享按钮、渠道投放链接),直接在投放到对应App的链接末尾追加专属来源参数是最可靠的方案:
- 投放到WhatsApp的链接统一拼接
?utm_source=whatsapp - 投放到Telegram的链接统一拼接
?utm_source=telegram - 投放到Messenger的链接统一拼接
?utm_source=messenger
用户点击跳转后,直接通过$_GET['utm_source']即可获取准确来源,完全不受App WebView隐私策略、版本差异的影响。如果是用户自发复制分享的无参数链接,再用上面的UA匹配方案做兜底即可。
3. 自定义请求头辅助判断
部分版本的App会在内嵌WebView发起请求时携带专属自定义请求头,比如部分版本WhatsApp会携带X-WhatsApp相关头、Telegram会携带X-Telegram-Chat头,但这类特征跨版本、跨系统的差异极大,覆盖率不足30%,仅能作为辅助校验维度,不能作为主判断逻辑。
注意事项
- 不要依赖
$_SERVER['HTTP_REFERER']判断App来源:90%以上的App内打开场景下,Referer要么为空,要么仅显示当前链接的域名,不会携带任何App相关标识 - iOS 14+系统的App隐私限制会导致部分App的UA被模糊处理,这种场景下自定义参数是唯一可靠的识别方式
- 如果用户把App内的链接复制到系统浏览器打开,UA不会携带App标识,这类场景本身不属于App内跳转,不需要计入对应渠道流量
内容的提问来源于stack exchange,提问作者netnet
相关产品推荐
相关产品推荐

