Is there any way to generate an unique ID for device without using IDFA? [duplicate] - ios

This question already has an answer here:
How do I check where my app is using IDFA
(1 answer)
Closed 4 years ago.
I have to generate an unique ID for each device. Right now, I take device's unique ID with this way:
let uniqueStr = UIDevice.current.identifierForVendor?.uuidString
But in App Store Submission, this error come up:
Your app is using the Advertising Identifier (IDFA). You must either
provide details about the IDFA usage or remove it from the app and
submit your binary again.
My app has nothing to do with advertisement at all. Is there any way to get unique ID without getting this IDFA error?

It seems that apple throws this error when Advertising Identifier (IDFA) is being used not identifierForVendor.
It might be possible that some 3rd party library is using it. You can check for the actual reason for what or which framework using the IDFA from below stackoverflow answer:
How do I check where my app is using IDFA
Then,
Either update your library accordingly or
You can select using IDFA option while submitting the app.

Related

Get device UDID (40 digit id) programmatically [duplicate]

This question already has answers here:
UIDevice uniqueIdentifier deprecated - What to do now?
(32 answers)
Closed 5 years ago.
In my app, I am trying to get all information of the device and to be displayed in app screen.
I got some of the informations, but not getting code to obtain UDID, Serial number and model identifier of a device, what we can able to see in iTunes.
I can able to get UUID, but my request is to get UDID of the device. I got some apps in which they are getting device info like this.
I will be very helpful if I get any solution in this.
Thanks in advance.
You can't as of iOS 6.
Link #1
Money quote:
As reported by 9to5Mac (and confirmed by Macworld), Apple alerted
developers of a cut-off date for new apps or app updates that access
an iOS device’s UDID (Universal Device ID), an area of security and
privacy concern.
Link #2
Extended money quote:
With iOS 6 Apple has also completely eliminated its controversial
Universal Device IDs (UDID) and replaced it with a more
privacy-friendly way for application vendors and advertisers to
identify specific devices, Hall said,
Apple’s UDIDs are basically a set of alphanumeric characters that are
used to uniquely identify an iPhone or iPad. The numbers are designed
to let application developers track how many users have downloaded
their application and to gather other information for data analytics.
From the same article, the way to go now is:
With the new iOS 6 the company has gone one step further by
eliminating UDIDs completely and replace with a set of three new devie
identifiers. One is a vendor specific identifier that can be used by
application vendors to recognize specific devices, another is designed
for use by online advertisers and the third is an application-specific
ID. Unlike UDID’s, the new identifiers are not persistent and can be
cleared, though the device has to be completely reset to get rid of
the advertiser identities, Hall said.
In conclusion, the correct way is to either (a) use UUID or (b) ask your user for the device's UDID.
You can use this (Swift 3):
UIDevice.current.identifierForVendor!.uuidString

How to identify iOS device uniquely instead of using UUID and UDID [duplicate]

This question already has answers here:
Unique Identification of iOS device for iOS 7.0 and above
(6 answers)
Closed 6 years ago.
In my iOS app, I have to restrict the user to use iOS app per device. To do this I found a solution that we can use the UUID (Universally Unique Identifier) or UDID (Unique Device Identifier). But according to this answer I can't use UUID, because if app gets deleted or reinstalled UUID has been getting changed and I don't want this. Also Apple rejects apps if app uses UDID.
Is there any way to identify iOS device uniquely.
Apple has done away with the approach of UDIDs and will reject apps that use the same for unique device identification.
Source: TNW
What you are looking for is Vendor ID
I'm using this library for my projects, and it's working like a charm, please try :
https://github.com/blackpixel/BPXLUUIDHandler
easy to use :
Import BPXLUUIDHandler.h
Retrieve the UUID with
[BPXLUUIDHandler UUID]
Thats all...
Here is some info from project's github page :
As of iOS 5, Apple has deprecated the device unique identifier api and
hasn’t provided a friendly Obj-C replacement, instead recommending
CFUUIDCreate and NSUserDefaults.
CFUUIDCreate isn’t very complicated and neither is NSUserDefaults, but
this solution fails in a few different ways:
It’s not a quick one-shot call to get the UUID; you have to write your own wrapper to make it friendly
It doesn’t persist; deleting the app blows away the UUID (can be persisted if stored in the keychain though)
There’s no way to share it between apps

Query app id of current app on iOS [duplicate]

This question already has answers here:
Is it possible to get app id from iOS application programmatically?
(7 answers)
Closed 8 years ago.
Assume this scenario, there are several apps which will use shared feature. THis feature want to know what's current application's app Id.
My question is: Is there a way to get the application's app Id programmatically. Or What I need do is always find the app id in iTunes and hard coded into my app?
Edit:
I do not make the question clear enough. the app id for twitter in app store is 333903271 and I can use this link(itunes.apple.com/us/app/twitter/id333903271?mt=8&uo=4) to open twitter in appstore. I want this app id, not the bundle id. thanks.
That is a feature of the app store, not the OS. For example, until you setup your app in the app store, you won't have this ID. Instead, once you know the id, you should store it in your App's Info.plist then you can just query it via NSBundle objectForInfoDictionaryKey:.
As long as all your apps store it using the same key, your shared component can rely on it being there.
[[NSBundle mainBundle] bundleIdentifier] should get you what you're looking for.

Finding IMEI number using Objective-C [duplicate]

This question already has answers here:
How to get IMEI on iPhone?
(7 answers)
Closed 2 years ago.
I need to find a way to get the IMEI number of an iPhone device. This question is not a duplicate.
I have gone through several forums including SO, and had no luck finding an answer.
Some say Apple doesn't allow developers to see the IMEI number (SO post), and some say to use UDID instead (SO post). Some say that UDID is deprecated (in iOS 7).
I need to know the following:
1.) Does Apple permit developers to retrieve the IMEI number of the device?
2.) How can i programatically do it?
3.) In case if Apple doesn't allow developers to gather the IMEI number, do they provide any other unique number for the device?
4.) Some suggest to use Telephony framework. If i do so, will apple reject my application?
Apple does not allow you to identify a device any more.
UDID, MAC address and all other device identifiers are no longer accessible or allowed by Apple.
Apple suggest that you use either UUID (which you will need to store your self or), identifierForVendor or advertisingIdentifier.
Apple is now also rejecting app that use the advertisingIdentifier and not showing any advertisements apps.
Any means to get the IMEI number are using private methods, which is also not allowed by Apple anymore. And your mobile app might/will get rejected because of this.
Unfortunately, there is no way to get a unique identifier for a device which will always remain the same. Apple no longer allows you to access the UDID. And in iOS 7, all devices' MAC addresses return the same value, so that is no longer useful either.
However, iOS does now give access to two types of identifiers which can be used to identify a device. They are:
Vendor ID - [UIDevice identifierForVendor]. This is a unique identifier which is the same for all apps from the same vendor or company. It will remain the same, so long as the user has at least one app from the vendor installed on their device. So if you have 3 apps, the vendor ID will remain the same unless the user uninstalls all three apps, and then reinstalls. This is not so useful if you only have one app - if the user deletes it and then reinstalls it, it will change.
Advertiser ID - [UIDevice advertisingIdentifier]. This is a unique identifier meant for advertising purposes. But if you use it for non-advertising purposes they, for the most part, won't care. Under most circumstances, the advertising identifier will not change, even if the user deletes and reinstalls the app. However, there is an option in the iOS settings to reset the advertising identifier, which will change it. This is meant to that users can choose to disassociate themselves from any advertising information which has been collected about them. But this is a very advanced setting and I doubt that many users would do this frequently enough that it would be a problem for you.
You can obtain IMEI using private frameworks -See this Question but probably your app will be rejected from app store then.
If you want to obtain some device identifier to use in your application you must use uniqueIdentifier property defined in UIDevice class
(Available in iOS 6.0 and later):
NSString *UDID = [[[UIDevice currentDevice] identifierForVendor] UUIDString];
You can save UUID in keychain and user it as unique number. It won't change until user will reset iOS.
If you want to obtain the IMEI there is no way (on a non-jailbroken device). If you wish to identify the user take a look at this answer. Please pay attention to all documentation/answers written before iOS7 since things have changed.

Regarding Unique identifier in iOS app [duplicate]

This question already has answers here:
UIDevice uniqueIdentifier deprecated - What to do now?
(32 answers)
Closed 9 years ago.
Actually the requirement is I have to create the Unique identifier for our iOS app.
This id should be still unique in the following scenarios.
App is killed and restarted again?
Data is cleared from settings and restarted again?
App is re-installed again?
OS is updated? Ex: iOS 6 to 7
Phone is factory reset?
So now there is no use of UDID which has been deprecated.
I am planing to use "device macaddress + app bundleidetifier" with md5 encryption.
Is this correct approach ? If NO kindly give me you suggestions.
Apple won't let you use any identifier that might be shared between the current owner of the device and a future owner, or if the user doesn't want to share it. Because of that Apple, has introduced an "advertising identifier" that does most of the things you want (except for the factory reset):
[[ASIdentifierManager sharedManager] advertisingIdentifier]
If there were other ways to get a device ID, Apple will probably try to block them.

Resources