好的,这就是我要做的,基于 Nikolai Ruhe 的回答,但改进了我刚刚发现的一个陷阱。
假设用户 John Doe 在他运行 iOS 5.0 的 iPhone 上安装了我的应用程序。
在第一次启动时,该应用程序向我的服务器发送了一个匿名请求,该请求有效地将“运行 iOS 5.0 的设备”的计数器增加了一个。应用程序会记录此事件和 iOS 版本(在用户默认值或钥匙串中),并且只要本地存储的操作系统版本字符串与当前版本字符串(由系统返回)相等,就不会发送任何进一步的请求。
下周,John 升级到 iOS 5.1 并启动了我的应用程序。该应用程序检测到操作系统版本差异并向我的服务器发送新请求。
但是,如果这仅将一台设备添加到“iOS 5.1”人群中,那么 John 的 iPhone 现在会被计算两次:一次是“运行 5.0 的设备”,一次是“运行 5.1 的设备”。
因此,要解决此问题,我的 HTTP 请求应如下所示:
http://myserver.com/my_stats_scripts/index.php?app_id=com.myCompany.myApp&new_os_ver=5.1&old_os_ver=5.0
So my database can increase the number of 5.1 devices and decrease the number of 5.0 devices by one.
Of course, on the first request, the HTTP parameter old_os_ver
is set to empty, and the server treats it like a new device.
If I pull this right, I no longer need UUIDs. But I am still sending system info covertly to my server. I think I'll also disclose this on the Terms of Use.