Identify device between installs iOS, like Whisper App - ios

I am developing an app where I would like to be able to stop users from uninstalling the app and reinstalling to create a new user account. It's a fitness app and they get points/penalties depending on activity levels.
Now as far as I can tell I can only get two unique identifiers from the device, the Vendor ID which will be reset once the user uninstalls the app or the advertiser Id which the user can reset at will. So as far as I can see, no real way of doing it if the user is savvy enough.
So, how do whisper do it, I played with the app a while ago and upon reinstalling it it knew exactly who I was. As an experiment I uninstalled the app, reset my advertising if and restarted the phone. I then reinstalled the app and again it knew exactly who I was.
How is this possible? I thought the whole point of the user being able to reset these things is to allow for them to block tracking?
I would very much like to have this ability in my app, but cannot see any way with the current apple api's and guidelines to make it work?

If you gat UDID of the device and save it to your database, you can always search from database to check if this UDID already exists or not. You can get UDID by the code
NSString* uniqueIdentifier = [[[UIDevice currentDevice] identifierForVendor] UUIDString];

Related

Best way to uniquely identify iOS device?

I'm aware if the following methods, each which has it'd flaws
UDID
Advertising Identifier
Vendor ID
The problem with UDID is that its deprecated and doesn't even work as of ios7, problem with other two is that the user can change them via software reset of phone or reinstallation of app
Another interesting solution I found is to randomly generate one yourself and then save to keychain to avoid deletion upon app reinstallation however would this work across software resets? And surely there's a very small chance that two devices would randomly generate the same ID?
I think the best option might be to use UDID but I would like to know if, even though the UDID is incorrect as of ios7, is it still unique?
Yet another option is MAC address but as far as I know, there is no API for these
Please advise on the best option
Starting iOS 7 deducing MAC address isn't possible. You can, however, use below:
[[[UIDevice currentDevice] identifierForVendor] UUIDString]
Per Apple Documentation:
The value changes when the user deletes all of that vendor’s apps from
the device and subsequently reinstalls one or more of them. The value
can also when installing test builds using Xcode or when installing an
app on a device using ad-hoc distribution. Therefore, if your app
stores the value of this property anywhere, you should gracefully
handle situations where the identifier changes.

IdentifierForVendor value under certain scenario

I am developing an App using UIDevices IdentifierForValue to track users behavior. In the present we know that under the scenarion shown below, value of IdentifierForVendor will change:
App uninstall and install again
As we know that for mobile device, there`re some scenario that we need to take into consideration. So how about the value of IdentifierForVendor in the following circumstances:
If subscriber change one`s SIM but still using the same phone
If subscriber use the same SIM but change to another phone. For example, one stop using iphone 6 and use iphone 6S instead with data restored from iTune`s backup data.
If subscriber use another Apple ID in the same phone.
Any ideas? Any help is greatly appreciated.
identifierForVendor doesn't take into account the SIM card or Apple ID. It is alternative to UDID that doesn't allow tracking specific device and it is constant for device until every app of the vendor on that device is uninstalled. I used this identifier and switched SIM and Apple ID in the past and I didn't notice the identifier changing.
Link to the documentation

How to Get Unique Identity From iOS Device?

i am NewBie in iOS Development and i Know that this Question are asked many Times. i am do R&D on it but Not Get my Answer. I want to Get any Unique identity from devise. i know that there are many Option like as
1.UDID
2.UUID
But From iOS 7 Apple not accept app that Fetch UDID From Devise so that Option is Block For me. and Now Second Option is UUID But From my R&D Result UUID will be Changed Every time when User Completely Uninstall application and Reinstall it. So, I Get Different UUID for Same Device. and Another Option is like as
Device Token
Here I want to Know that for Push Notification Service Device Token are remaining same for Every time When User Uninstall app and Reinstall it. if Device token are Different for Every Uninstall and Reinstallation Process then please Give me Any Solution for Unique Identification that are Remaining same for every time.
thanks in advance.
You can save UUID in the keychain, so even uninstall and reinstall app, you still can get it back.
If all you want to do is to uniquely identify devices, you may want to use [UIDevice identifierForVendor] which will stay the same as long as the apps come from the same vendor and running on the same device.
See documentation.

Uniquely Identify iOS device over multiple users

I have done a lot of research on this so please read the question before marking this as similar to some other question.
Our app needs to uniquely determine an iPhone such that even when user completely wipes a phone, when he runs our app we can be sure that it is the same device. The most important thing is we also need to determine devices over multiple Apple ID users so suggestions containing Keychain access and uniqueVendorID might not work as those change when another user starts using that phone. And as I have read using MAC addresses and old UDID for devices is not longer available as of iOS 6.0. I went through [UIDevice identifierForVendor] but this NSUUID changes when all the app by the same vendor has been uninstalled Reference.
I have looked through these resources:
UIDevice uniqueIdentifier Deprecated - What To Do Now?
and
What is a long-term method I can use to uniquely identify an iOS device?
I can not disclose the nature of work that my app performs due to non-disclosure, but to clarify what I require:
Multiple users might use our app on same phones, I need a way to know that the device user A used before and has reported to have handed over to user B is the same device on which our app was run. Is there any way to achieve this?
There's no way to achieve this.
If it's really the case that different users might use your app on the same device after a factory reset of the device, then what you want is not possible. Apple deprecated UIDevice uniqueIdentifier which would have been the way to do this.
as long as they dont restore/wipe the device identifierForVendor is ok

Reading iPhone Information (VB.NET)

Has anyone found out a way to read the device which is plugged in and return a serial number for that device?
For example, I am wanting to read my iPhone Serial Number which is plugged into a USB Port, I am wanting my application to tell me my serial number for that device.
Is there a way to do this??
Thank You
J Mahone
Doubt you could get it via USB. You CAN write a small iOS App (like add one line of code to an Xcode App created with New Project) to get it and NSLog it, using:
[[UIDevice currentDevice] uniqueIdentifier];
As per the docs, this is deprecated and may not be supported in future. Also, if you try to submit ANY app that uses this to the App store, it will be rejected during review. This doesn't apply to Enterprise Apps, only Apps submitted to the store. And nothing stopping you from writing one for your own use.
The 'Approved' device ID now is Advertising ID.
Also... now that I think about it, if you search around in the iOS App store for UUID you will find a bunch of FREE Apps that will display that information on the screen for your device.

Resources