OpenUDID or Mac address to choose on IOS? - ios

Why folks are using OpenUDID and not Mac address in iOS for identification? It would be straightforward to use Mac address. All mobil devices have Mac address, it is well known, and it is unique.

MAC Address contains network device's information, which may cause security breaches, tracking, etc. Using a meaningless OpenUDID protects the device and its owner.

You should never ever use the a device specific identifier to detect a device.
Devices change owner and this would mean that you if use sells his device the new user could end up with the data of the previous owner.

Related

Get UUID from mac address on iOS

I'm a new developer developing a BLE service on iOS and Android. Currently there is a problem that I am facing, that the device address on iOS is the UUID mapped from the mac address, and on Android it is the mac address of the device. So now is there a way on iOS, from the mac address I received can get the corresponding UUID? Thanks everyone!
I am not sure how to do it.
the device address on iOS is the UUID mapped from the mac address
This is incorrect. The peripheral ID is not "from" the MAC address. It's just a random UUID. It's not even stable (it can, and does, change over time, though not quickly). There is no way on iOS to get the MAC address of a BLE device, or even to absolutely uniquely identify a BLE device unless you control the firmware. If you do control the firmware, then you can provide some mechanism to uniquely identify the device over a protocol of your own design.
As a broad rule, you can use the peripheral ID to identify or connect to a device you've connected to before. This isn't 100%, because the ID does change sometimes. But for the most part it does work (and it's intended to work, so Apple won't just break this arbitrarily). But you cannot otherwise identify the device.
As a corollary, the peripheral ID on one iPhone is completely unrelated to the peripheral ID on another phone for the same device. This is intentional.
You will have to adjust your design to deal with these facts.

Home automation with ESP32, bluetooth and iPhone drives me crazy

I'm trying to use the ESP32 to check if my iPhone is in the house using the bluetooth.
The problem is that when I scan near devices with the ESP32's bluetooth, the iPhone only sends two things:
Mac address
Service UUID
The Mac address changes every 15 minutes more or less, so it's useless.
And the UUID is not unique.
I find other devices with the same UUID (strange)
Someone knows how can I workaround these limitations and recognise if my iPhone is near or not?
Thank you all!
This is all by design of Bluetooth. Bluetooth intentionally makes tracking unpaired devices difficult. See Bluetooth Technology
Protecting Your Privacy for a very high-level overview of how this works.
If you pair with the phone, you can get the IRK (Identity Resolution Key), and with that you get resolve the "real" MAC address and identify the phone. That said, if you're using esp-idf, the code indicates that it doesn't support RPA (Resolvable Private Address). See also BLE generating and resolving random mac addresses does not work correctly where they also suggest this is a limitation of the ESP32.
That said, iPhones do advertise a LocalName, and if this is just for use in your house, and you control your phone's device name, you can just look for that in the advertising packet. Note that the local name may be truncated or eliminated if it is long or there are other things the phone needs to advertise. If it's not advertising it, you can connect and read it from GAP. See How do you get the actual name of a bluetooth low energy device?

How do iOS apps know your region?

In the pc world they can only use one identifier which is IP address, but I just recently discovered iOS apps use 2 or more criteria to find your region. I found something called advertising identifier that those apps are using. Can anybody explain the concept please? What kind of identifier is this and how can I mask my device?
UDID, UUID, MAC Address,IDFA-identifierForIdentifier,IDFV-identifierForVendor
But unfortunately, all of the above indicates that the device identification number unique in IOS7 in either banned, or reinstall the program after two acquired identifier is not the same.
IOS system because the data are stored in sandBox inside, once you delete App, sandBox would cease to exist. Fortunately, there is one exception, that is, keychain (keychain).

Retrieving device WiFi MAC address with iOS 7

Our app is using device WiFiMAC address to uniquely identify a device. As per the
Apple doumentation we shall start using identifierForVendor property of UIDevice but my app is strongly dependent on WiFi MAC address. At run time, app users look into device settings and fetch the WiFi Mac address and manually put them in some tool to enable some feature on server side. Has anyone retrieved the device WiFi MAC address with iOS 7?
This was intentionally removed from the SDK in iOS 7. You can no longer retrieve the MAC address. Techcrunch has one of several stories on it, and it was confirmed at WWDC.
Use libimobiledevice and from command line run:
./ideviceinfo -k WiFiAddress

What disadvantage I have if I track Mac address of iPhone?

What disadvantage I have if I track / fetch Mac address of iPhone or iPad? I just need to know which services that particular user is using. Will Apple refuse my App because of it?
I don't think apple reject your app simply because of you are accessing device mac address. Furthermore mac address is accessed/used for some times now to replace depreceted UUID api. You just make sure you are not using any private api's to access mac address. There is a chance that Apple may block access to mac address in the future..
EDIT: In apple official developer forum, this question is already asked and answered. Just read the answer by apple employee eskimo1 there
No they won't, you just need to be prepared that they might disallow access to the Mac Address in a future iOS version...

Resources