我正在考虑使用CFUUIDCreate
API在我的服务器中构建一个数据库,以衡量我的每个应用程序的用户百分比正在运行哪个版本的iOS(帮助我做出最低支持iOS的决定)未来发展的版本。)
我的问题是:我是否应该要求用户允许将(匿名) UUID / iOS版数据对发送到我的服务器,或者是否可以执行它自动?
我问,因为无论如何我都可以安全地打赌,但是大多数用户都会对技术细节感到害怕并且很可能会下降。此外,UIAlertView
中的文字越长,用户就越不会阅读它。
如果我不问,Apple会拒绝我的应用吗?即使他们不这样做,您认为我应该始终要求用户允许发送此匿名数据吗?
每个人在实现此类功能方面的经验是什么?
答案 0 :(得分:2)
好的,这就是我要做的,基于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
因此,我的数据库可以增加 5.1设备的数量,并减少 5.0设备的数量。
当然,在第一个请求中,HTTP参数old_os_ver
设置为空,服务器将其视为新设备。
如果我向右拉,我不再需要UUID。但我仍然秘密地将系统信息发送到我的服务器。我想我也会在使用条款中披露这一点。
答案 1 :(得分:1)
你一定要求许可。这里至关重要的一点是,您的数据收集可能是匿名的,但可以用它来跟踪个人用户。
Web浏览器会针对每个请求发送用户代理字符串。不同之处在于它们不会发送一个永远不会改变的普遍可跟踪的ID。
因此,您的提案中有问题的部分是UUID。为什么不把它留下来?您的应用程序将发送一次匿名请求,并在本地存储传输的iOS版本。当用户升级操作系统时,您将发送另一个包含新iOS版本和更新计数的请求。
使用此方案,您不会传输可跟踪数据,仍然可以获得正确的逐个使用统计信息。