iOS獲取設(shè)備ID總結(jié)

iOS獲取設(shè)備ID總結(jié)

UDID

簡介:UDID的全稱是Unique Device Identifier暖混,顧名思義恋腕,它就是蘋果IOS設(shè)備的唯一識別碼,它由40個字符的字母和數(shù)字組成。在很多需要限制一臺設(shè)備一個賬號的應(yīng)用中經(jīng)常會用到枫虏。在iOS5中可以獲取到設(shè)備的UDID报强,iOS7中已經(jīng)完全的禁用了它灸姊。iOS7之前的使用了的app如果在iOS7上運行,它不會返回設(shè)備的UDID躺涝,而是會返回一串字符串厨钻,以FFFFFFFF開頭,跟著identifierForVendor的十六進制值坚嗜。

獲群话颉:[[UIDevice currentDevice] uniqueIdentifier]

廢棄:iOS6

IDFV

簡介:iOS 6.0系統(tǒng)新增用于替換uniqueIdentifier的接口。是給Vendor標(biāo)識用戶用的苍蔬,每個設(shè)備在所屬同一個Vender的應(yīng)用里诱建,都有相同的值。其中的Vender是指應(yīng)用提供商碟绑,但準(zhǔn)確點說俺猿,是通過BundleID的DNS反轉(zhuǎn)的前兩部分進行匹配,如果相同就是同一個Vender格仲,例如對于com.somecompany.appone,com.somecompany.apptwo這兩個BundleID來說押袍,就屬于同一個Vender,共享同一個idfv的值凯肋。和idfa不同的是谊惭,idfv的值是一定能取到的,所以非常適合于作為內(nèi)部用戶行為分析的主id侮东,來標(biāo)識用戶圈盔,替代OpenUDID。如果用戶將屬于此Vender的所有App卸載悄雅,則idfv的值會被重置驱敲,即再重裝此Vender的App,idfv的值和之前不同宽闲。

獲戎谡!:[[[UIDevice currentDevice] identifierForVendor] UUIDString]

適用:iOS6.0+

例子:95955F33-BFBD-48BA-A630-866D2DAE482D

IDFA

簡介:廣告標(biāo)示符,適用于對外:例如廣告推廣容诬,換量等跨應(yīng)用的用戶追蹤等围辙。但如果用戶完全重置系統(tǒng)((設(shè)置程序 -> 通用 -> 還原 -> 還原位置與隱私) ,這個廣告標(biāo)示符會重新生成放案。另外如果用戶明確的還原廣告(設(shè)置程序-> 通用 -> 關(guān)于本機 -> 廣告 -> 還原廣告標(biāo)示符) 姚建,那么廣告標(biāo)示符也會重新生成。注意:如果程序在后臺運行吱殉,此時用戶“還原廣告標(biāo)示符”掸冤,然后再回到程序中厘托,此時獲取廣 告標(biāo)示符并不會立即獲得還原后的標(biāo)示符。必須要終止程序稿湿,然后再重新啟動程序铅匹,才能獲得還原后的廣告標(biāo)示符。在同一個設(shè)備上的所有App都會取到相同的值饺藤,是蘋果專門給各廣告提供商用來追蹤用戶而設(shè)的包斑,用戶可以在 設(shè)置 -> 隱私 -> 廣告追蹤 里重置此id的值,或限制此id的使用涕俗。

獲嚷薹帷:[[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString];

適用:iOS6.0+

例子:9C287922-EE26-4501-94B5-DDE6F83E1475

MAC地址

簡介:MAC地址在網(wǎng)絡(luò)上用來區(qū)分設(shè)備的唯一性,接入網(wǎng)絡(luò)的設(shè)備都有一個MAC地址再姑,他們肯定都是不同的萌抵,是唯一的。一部iPhone上可能有多個MAC地址元镀,包括WIFI的绍填、SIM的等,但是iTouch和iPad上就有一個WIFI的栖疑,因此只需獲取WIFI的MAC地址就好了讨永,也就是en0的地址。MAC地址就如同我們身份證上的身份證號碼遇革,具有全球唯一性卿闹。但在iOS7之后,如果請求Mac地址都會返回一個固定值澳淑。

廢棄:iOS7.0+

獲取:

- (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");  
        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)];  
      
    NSLog(@"outString:%@", outstring);  
      
    free(buf);  
      
    return [outstring uppercaseString];  
}

KeyChain

簡介:iOS整個系統(tǒng)有一個KeyChain插佛,每個程序都可以往KeyChain中記錄數(shù)據(jù)杠巡,而且只能讀取到自己程序記錄在KeyChain中的數(shù)據(jù)。而且就算我們程序刪除掉雇寇,系統(tǒng)經(jīng)過升級以后再安裝回來氢拥,依舊可以獲取到與之前一致的UDID(系統(tǒng)還原、刷機除外)锨侯。因此我們可以將UUID的字符串存儲到KeyChain中嫩海,然后下次直接從KeyChain獲取UUID字符串。(本示例中使用KeychainItemWrapper工具類)

獲惹舫铡:

+ (NSString *)UUID {
    KeychainItemWrapper *keyChainWrapper = [[KeychainItemWrapper alloc] initWithIdentifier:@"MYAppID" accessGroup:@"com.test.app"];
    NSString *UUID = [keyChainWrapper objectForKey:(__bridge id)kSecValueData];
    
    if (UUID == nil || UUID.length == 0) {
        UUID = [[[UIDevice currentDevice] identifierForVendor] UUIDString];
        [keyChainWrapper setObject:UUID forKey:(__bridge id)kSecValueData];
    }
    
    return UUID;
}

AppleAccount

簡介:雖然蘋果在iOS6中禁用了獲取uuid的方式叁怪,但是只要你研究下就知道這個API只是私有化了,使用私有API還是可以獲取設(shè)備的uuid深滚。但是這個方面也面臨著風(fēng)險:比如API變更以及AppStore審核問題奕谭,但是在越獄設(shè)備上你還是可以盡情享用的涣觉。

類:AADeviceInfo(dump出頭文件)

@class NSObject<OS_dispatch_semaphore>, APSConnection, NSData;

@interface AADeviceInfo : NSObject {

APSConnection *_apsConnection;

BOOL _tokenDone;

NSData *_token;

NSObject<OS_dispatch_semaphore> *_tokenSema;

}

+ (id)userAgentHeader;

+ (id)signatureWithDictionary:(id)arg1;

+ (id)apnsToken;

+ (id)serialNumber;

+ (id)clientInfoHeader;

+ (id)appleIDClientIdentifier;

+ (id)productVersion;

+ (id)osVersion;

+ (id)udid;

+ (id)infoDictionary;

- (id)wifiMacAddress;

- (id)regionCode;

- (id)deviceClass;

- (id)osName;

- (id)productType;

- (id)apnsToken;

- (id)serialNumber;

- (id)deviceInfoDictionary;

- (id)appleIDClientIdentifier;

- (id)productVersion;

- (id)osVersion;

- (id)udid;

- (id)init;

- (void).cxx_destruct;

- (id)buildVersion;

@end

獲取:[AADeviceInfo udid]

使用方法:在項目中將真機上的AppleAccount.framework框架導(dǎo)出血柳,引入Xcode工程中官册,利用runtime或者直接使用該類就行。(細(xì)節(jié)補充:導(dǎo)出AppleAccount.framework后难捌,進入AppleAccount.framework的根目錄膝宁,新建Headers文件夾,然后將dump出的頭文件放在Headers目錄根吁,就可以像引用第三方framework一樣在項目中使用)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末员淫,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子婴栽,更是在濱河造成了極大的恐慌满粗,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,496評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件愚争,死亡現(xiàn)場離奇詭異映皆,居然都是意外死亡,警方通過查閱死者的電腦和手機轰枝,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評論 3 392
  • 文/潘曉璐 我一進店門捅彻,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人鞍陨,你說我怎么就攤上這事步淹。” “怎么了诚撵?”我有些...
    開封第一講書人閱讀 162,632評論 0 353
  • 文/不壞的土叔 我叫張陵缭裆,是天一觀的道長。 經(jīng)常有香客問我寿烟,道長澈驼,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,180評論 1 292
  • 正文 為了忘掉前任筛武,我火速辦了婚禮缝其,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘徘六。我一直安慰自己内边,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,198評論 6 388
  • 文/花漫 我一把揭開白布待锈。 她就那樣靜靜地躺著漠其,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上辉懒,一...
    開封第一講書人閱讀 51,165評論 1 299
  • 那天阳惹,我揣著相機與錄音,去河邊找鬼眶俩。 笑死莹汤,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的颠印。 我是一名探鬼主播纲岭,決...
    沈念sama閱讀 40,052評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼线罕!你這毒婦竟也來了止潮?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,910評論 0 274
  • 序言:老撾萬榮一對情侶失蹤钞楼,失蹤者是張志新(化名)和其女友劉穎喇闸,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體询件,經(jīng)...
    沈念sama閱讀 45,324評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡燃乍,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,542評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了宛琅。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片刻蟹。...
    茶點故事閱讀 39,711評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖嘿辟,靈堂內(nèi)的尸體忽然破棺而出舆瘪,到底是詐尸還是另有隱情,我是刑警寧澤红伦,帶...
    沈念sama閱讀 35,424評論 5 343
  • 正文 年R本政府宣布英古,位于F島的核電站,受9級特大地震影響昙读,放射性物質(zhì)發(fā)生泄漏召调。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,017評論 3 326
  • 文/蒙蒙 一箕戳、第九天 我趴在偏房一處隱蔽的房頂上張望某残。 院中可真熱鬧国撵,春花似錦陵吸、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春囚似,著一層夾襖步出監(jiān)牢的瞬間剩拢,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評論 1 269
  • 我被黑心中介騙來泰國打工饶唤, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留徐伐,地道東北人。 一個月前我還...
    沈念sama閱讀 47,722評論 2 368
  • 正文 我出身青樓募狂,卻偏偏與公主長得像办素,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子祸穷,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,611評論 2 353

推薦閱讀更多精彩內(nèi)容