I’m considering using the CFUUIDCreate API to build a database in my server to measure what percentage of users of each of my apps are running which version of iOS (to help me make a decision on iOS minimum supported version for future development).
My question is: Should I ask the user for permission to send the (anonymous) UUID / iOS version data pair to my server, or is it OK to do it automatically?
I ask because I could bet on the safe side and ask anyway, but most users would feel intimidated by the technical details and most likely decline. Also, the longer the text in an UIAlertView, the more likely the user won’t read it.
Will Apple reject my app if I don’t ask? Even if they don’t, do you think I should always ask the user for permission to send this anonymous data?
What’s everyone’s experience implementing this kind of functionality?
OK, this is what I’m going to do, based on Nikolai Ruhe’s answer but improving on a pitfall I just discovered.
Suppose user John Doe installed my app on his iPhone running iOS 5.0.
On the first launch, the app sends an anonymous request to my server that effectively increases by one the counter for ‘Devices running iOS 5.0’. The app records this event and the iOS version (in User Defaults or Keychain) and does not send any further requests as long as the locally stored OS version string and the current one (returned by the system) are equal.
The next week, John upgrades to iOS 5.1 and launches my app. The app detects the OS version discrepancy and sends a new request to my server.
But if this only adds one device to the ‘iOS 5.1’ population, John’s iPhone is now being counted twice: once as “Devices running 5.0” and once as “Devices running 5.1”.
So to fix this, my HTTP request should look like this:
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_veris 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.