iOS 下,自定义协议导致的数据追踪失效。

问题描述

使用 Tauri@v2 开发的 iOS 应用。在使用 Firebase,GTM 等工具进行数据追踪时,出现数据时有时无的情况。

问题排查

已知情况:

  1. 数据追踪并非完全失效,而是时有时无。
  2. 应用开发采用 Tauri@v2 框架,Tauri 采用 WebView 来展示静态的 HTML 页面。
  3. 应用采用了热更新机制,即在启动时请求线上网站地址,若有新版本,则切换本地地址到线上地址。
  4. 在几次版本更新前,数据追踪正常有效,但版本更新后,数据追踪开始逐渐失效,直到下一个版本更新前,逐渐恢复。
  5. 应用整体功能,工作流程正常。
  6. 对数据追踪进行了判断,若数据追踪无法发送,则无法进行下一步流程,但流程正常进行,证明数据追踪有发送成功。

排查过程:

  1. 首先排查 GTM 是否正常加载生效,并对 DataLayer 对象进行轮询,若其中未包含相关事件,则不会进行下一步流程,但流程正常进行,证明 GTM 工作正常。
  2. GTM 工作正常,则需要排查是否发送成功。经过网络抓包,发现数据追踪的请求正常发送,且状态码 200,证明数据追踪服务器正常接收了该请求并返回响应。
  3. 在抓包过程中,发现携带参数中存在 tauri://localhost 地址。经查询,这是 Tauri 及大多数使用 HTML 为页面的跨平台框架所采用的方案。
    1. 简单来说,这些跨平台框架本质上是一个套壳的浏览器,但是它们不直接访问 HTTP,而是访问本地的 HTML 文件。
    2. 但本地文件不存在真实的网络地址,而采用 file:// 协议则会触发各类安全问题。
    3. 因此各框架不约而同的采用了自定义协议的方式,让 WebView 认为协议是安全的,并拦截协议来展示本地资源。
  4. 查询已有数据追踪数据,发现大部分数据来源均为线上地址,而不是本地 tauri://localhost 地址。怀疑是本地自定义协议问题。
  5. 经查询,确认是自定义协议问题,在 Electron,Capacitor 等同样采用 Web 技术进行跨平台开发的框架均有此问题提出。原因是 GA 这些是基于标准的 HTTP/HTTPS 协议设计并开发的,尽管可以正常收发请求响应,但在最终处理时,将非标准的协议过滤了。谷歌官方的 IssueTracker 中已有提及此问题。

问题总结

因使用的 Tauri 框架采用的是自定义协议来展示 HTML 页面,使得 GA 等数据追踪工具在收集数据时将其过滤掉了。

而因为应用采用了热更新机制,使得本该需要通过自定义协议 tauri://localhost 访问的页面,通过标准的 HTTPS 协议访问了,GA 等数据追踪工具因此正常工作。这也是为什么在更新前后的数据追踪会时有时无的原因。

问题修复

有三种方案,分别如下:

  1. 因为是自定义协议的问题,那就不使用自定义协议,整体切换到线上 HTTPS 协议。
  2. 覆盖相关数据追踪的 SDK 初始化逻辑,将本地协议替换为标准协议,但某些 SDK 内部可能存在严格校验机制,使得覆盖无效。
  3. 使用谷歌官方提供的 Measurement Protocol 做一层中间层,首先将事件发送到后台,在由后台发送至 GA。

iOS 下,自定义协议导致的数据追踪失效。
https://www.inksha.com/archives/ios-xia-zi-ding-yi-xie-yi-dao-zhi-de-shu-ju-zhui-zong-shi-xiao
作者
inksha
发布于
2025年10月27日
许可协议