UUID in ios5

Source: Internet
Author: User

In ios5, udid is no longer recommended. In future versions, this function may disappear. So we need to find a replacement method that uniquely identifies a device. Generally, the hardware has a unique identifier, so we can replace the udid with the hardware information, and the MAC address on the hardware can achieve this purpose.

The following function returns a string of the XX: XX type (12 hexadecimal numbers)

#include <sys/socket.h>#include <sys/sysctl.h>#include <net/if.h>#include <net/if_dl.h> ... - (NSString *)getMacAddress{  int                 mgmtInfoBase[6];  char                *msgBuffer = NULL;  size_t              length;  unsigned char       macAddress[6];  struct if_msghdr    *interfaceMsgStruct;  struct sockaddr_dl  *socketStruct;  NSString            *errorFlag = NULL;   // Setup the management Information Base (mib)  mgmtInfoBase[0] = CTL_NET;        // Request network subsystem  mgmtInfoBase[1] = AF_ROUTE;       // Routing table info  mgmtInfoBase[2] = 0;                mgmtInfoBase[3] = AF_LINK;        // Request link layer information  mgmtInfoBase[4] = NET_RT_IFLIST;  // Request all configured interfaces   // With all configured interfaces requested, get handle index  if ((mgmtInfoBase[5] = if_nametoindex("en0")) == 0)     errorFlag = @"if_nametoindex failure";  else  {    // Get the size of the data available (store in len)    if (sysctl(mgmtInfoBase, 6, NULL, &length, NULL, 0) < 0)       errorFlag = @"sysctl mgmtInfoBase failure";    else    {      // Alloc memory based on above call      if ((msgBuffer = malloc(length)) == NULL)        errorFlag = @"buffer allocation failure";      else      {        // Get system information, store in buffer        if (sysctl(mgmtInfoBase, 6, msgBuffer, &length, NULL, 0) < 0)          errorFlag = @"sysctl msgBuffer failure";      }    }  }   // Befor going any further...  if (errorFlag != NULL)  {    NSLog(@"Error: %@", errorFlag);    return errorFlag;  }   // Map msgbuffer to interface message structure  interfaceMsgStruct = (struct if_msghdr *) msgBuffer;   // Map to link-level socket structure  socketStruct = (struct sockaddr_dl *) (interfaceMsgStruct + 1);   // Copy link layer address data in socket structure to an array  memcpy(&macAddress, socketStruct->sdl_data + socketStruct->sdl_nlen, 6);   // Read from char array into a string object, into traditional Mac address format  NSString *macAddressString = [NSString stringWithFormat:@"%02X:%02X:%02X:%02X:%02X:%02X",                                 macAddress[0], macAddress[1], macAddress[2],                                 macAddress[3], macAddress[4], macAddress[5]];  NSLog(@"Mac Address: %@", macAddressString);   // Release the buffer memory  free(msgBuffer);   return macAddressString;}

Source code: http://iphonedevelopertips.com/device/determine-mac-address.html

The system SKD also provides a way to obtain the identifier string (udid), as follows:

[[UIDevice currentDevice] uniqueIdentifier]

However, when you open uidevice. H, you will find such definitions and annotations.

@property(nonatomic,readonly,retain) NSString    *uniqueIdentifier  __OSX_AVAILABLE_BUT_DEPRECATED(__MAC_NA,__MAC_NA,__IPHONE_2_0,__IPHONE_5_0);  // a string unique to each device based on various hardware info.

This indicates that Apple will gradually remove this attribute.

UUID can also be used in ios4, but it cannot be ensured that it can be used after system upgrade (ios6, 7. I have not tested ios5 yet, because I have no device in my hand (my friend told me the result ).

Here, you can also write the uuid method:

-(NSString*) uuid{CFUUIDRef puuid = CFUUIDCreate( nil );CFStringRef uuidString = CFUUIDCreateString( nil, puuid );NSString * result = (NSString *)CFStringCreateCopy( NULL, uuidString);CFRelease(puuid);CFRelease(uuidString);return [result autorelease];}

There are two concepts: UUID and udid.

UUID is a universal unique identifier code of the universally unique identifier.

Udid is the unique identifier of the unique device identifier device.

Udid is only a set of UUID.

All I know is to use these methods to uniquely identify the device. If you have a better method, I hope you can share it with us.

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.