Created
February 18, 2014 04:29
-
-
Save phnessu4/9064663 to your computer and use it in GitHub Desktop.
获取mac地址, 系统唯一标示
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#import <Foundation/Foundation.h> | |
@interface DeviceIdentifier : NSObject | |
/** | |
* @brief use this method when you need a unique identifier in one app. | |
* It generates a hash from the MAC-address in combination with the bundle identifier of your app. | |
* | |
* @return return a unique identifier | |
*/ | |
- (NSString *)uniqueDeviceIdentifier; | |
/** | |
* @brief use this method when you need a unique global identifier to track a device | |
* with multiple apps. as example a advertising network will use this method to track the device | |
* from different apps. | |
* | |
* @return return a unique global identifier | |
*/ | |
- (NSString *)uniqueGlobalDeviceIdentifier; | |
@end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#import "DeviceIdentifier.h" | |
#import "MD5.h" | |
#include <sys/socket.h> // Per msqr | |
#include <sys/sysctl.h> | |
#include <net/if.h> | |
#include <net/if_dl.h> | |
@implementation DeviceIdentifier | |
//////////////////////////////////////////////////////////////////////////////// | |
#pragma mark - | |
#pragma mark Private Methods | |
// Return the local MAC addy | |
// Courtesy of FreeBSD hackers email list | |
// Accidentally munged during previous update. Fixed thanks to erica sadun & mlamb. | |
- (NSString *)macaddress | |
{ | |
int mib[6]; | |
size_t len; | |
char *buf; | |
unsigned char *ptr; | |
struct if_msghdr *ifm; | |
struct sockaddr_dl *sdl; | |
mib[0] = CTL_NET; | |
mib[1] = AF_ROUTE; | |
mib[2] = 0; | |
mib[3] = AF_LINK; | |
mib[4] = NET_RT_IFLIST; | |
if ((mib[5] = if_nametoindex("en0")) == 0) { | |
printf("Error: if_nametoindex error\n"); | |
return NULL; | |
} | |
if (sysctl(mib, 6, NULL, &len, NULL, 0) < 0) { | |
printf("Error: sysctl, take 1\n"); | |
return NULL; | |
} | |
if ((buf = malloc(len)) == NULL) { | |
printf("Could not allocate memory. error!\n"); | |
return NULL; | |
} | |
if (sysctl(mib, 6, buf, &len, NULL, 0) < 0) { | |
printf("Error: sysctl, take 2"); | |
free(buf); | |
return NULL; | |
} | |
ifm = (struct if_msghdr *)buf; | |
sdl = (struct sockaddr_dl *)(ifm + 1); | |
ptr = (unsigned char *)LLADDR(sdl); | |
NSString *outstring = [NSString stringWithFormat:@"%02X:%02X:%02X:%02X:%02X:%02X", | |
*ptr, *(ptr+1), *(ptr+2), *(ptr+3), *(ptr+4), *(ptr+5)]; | |
free(buf); | |
return outstring; | |
} | |
//////////////////////////////////////////////////////////////////////////////// | |
#pragma mark - | |
#pragma mark Public Methods | |
- (NSString *)uniqueDeviceIdentifier | |
{ | |
NSString *macaddress = [self macaddress]; | |
NSString *bundleIdentifier = [[NSBundle mainBundle] bundleIdentifier]; | |
NSString *stringToHash = [NSString stringWithFormat:@"%@%@",macaddress,bundleIdentifier]; | |
NSString *uniqueIdentifier = [MD5 MD5String:stringToHash]; | |
return uniqueIdentifier; | |
} | |
- (NSString *)uniqueGlobalDeviceIdentifier | |
{ | |
NSString *macaddress = [self macaddress]; | |
NSString *uniqueIdentifier = [MD5 MD5String:macaddress]; | |
return uniqueIdentifier; | |
} | |
@end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment