UDID 대체 방법 -> MAC 어드레스 얻기
올해 3월이었죠. 애플이 개인정보 유출을 막고자 UDID를 쓰는 앱에 대해 단계적으로 심사하겠다고 했습니다.
지금은 IOS 5.0 이상에서는 UDID를 추출하는
NSString *udid = [[UIDevice currentDevice] uniqueIdentifier];
메소드를 쓰면 안된다고 하네요.
그래서 나온 대안 중, MAC 어드레스 값을 추출하는 방법입니다.
일종의 PC의 랜카드 고유번호(?)라고 하는데 아이폰에서는 네트워크 접속 이더넷카드 시리얼 넘버라고 보시면 되요.
구글에서 떠도는 소스는 3G와 WI-FI 환경에서 값이 다르게 추출된다고 하네요.
형식은 FF:FF:FF:FF:FF:FF 이런식으로 나와요
그 문제를 해결한 소스입니다. 저도 어디서 구한 소스구요 ㅋ
개발자님들 대단하다.
구현 방법입니다.
Macaddress.h
char* getMacAddress(char* macAddress, char* ifName);
Macaddress.c
#include <sys/types.h>
#include <stdio.h>
#include <string.h>
#include <sys/socket.h>
#include <net/if_dl.h>
#include <ifaddrs.h>
char* getMacAddress(char* macAddress, char* ifName) {
int success;
struct ifaddrs * addrs;
struct ifaddrs * cursor;
const struct sockaddr_dl * dlAddr;
const unsigned char* base;
int i;
success = getifaddrs(&addrs) == 0;
if (success) {
cursor = addrs;
while (cursor != 0) {
if ( (cursor->ifa_addr->sa_family == AF_LINK)
&& (((const struct sockaddr_dl *) cursor->ifa_addr)->sdl_type == 0x06) && strcmp(ifName, cursor->ifa_name)==0 ) {
dlAddr = (const struct sockaddr_dl *) cursor->ifa_addr;
base = (const unsigned char*) &dlAddr->sdl_data[dlAddr->sdl_nlen];
strcpy(macAddress, "");
for (i = 0; i < dlAddr->sdl_alen; i++) {
if (i != 0) {
strcat(macAddress, ":");
}
char partialAddr[3];
sprintf(partialAddr, "%02X", base[i]);
strcat(macAddress, partialAddr);
}
}
cursor = cursor->ifa_next;
}
freeifaddrs(addrs);
}
return macAddress;
}
갖다 쓰실 때는 이런식으로
#import "MacAddress.h"
char* macAddressString= (char*)malloc(18);
NSString *macAddress= [[NSString alloc] initWithCString:getMacAddress(macAddressString,"en0")
encoding:NSMacOSRomanStringEncoding];
NSLog(@" %@ ", macAddress);
'iOS' 카테고리의 다른 글
iOS / WebView 에서 App 간 자료교환 (0) | 2012.08.20 |
---|---|
iOS의 다양한 뷰 전환 - 1. 모달 뷰 컨트롤러 전환과 효과 (0) | 2012.08.20 |
html 파싱 with apple 이게 최고다 (2) | 2012.07.10 |
SQLITE3 DB 파일 복사 및 , Path가져오기 (0) | 2012.06.21 |
tabbar item에 들어갈 이미지 최대 사이즈는? (0) | 2012.06.20 |