手機(jī)多應(yīng)用通用唯一標(biāo)識(shí)

因公司需要一個(gè)手機(jī)多應(yīng)用唯一標(biāo)識(shí),所以查找了一些資料学密,然后總結(jié)了一下各種方法。

大概寫(xiě)了一些常用于手機(jī)唯一標(biāo)識(shí)的一些方法传藏,看完后可對(duì)比一下则果,看哪些比較適合需求幔翰!

1.UDID

是蘋(píng)果IOS設(shè)備的唯一識(shí)別碼,它由40個(gè)字符的字母和數(shù)字組成西壮。每臺(tái)iOS設(shè)備的UDID是唯一且永遠(yuǎn)不會(huì)改變遗增,ios7中已經(jīng)完全禁用了,現(xiàn)在已經(jīng)獲取不到UDID了款青。

2. Mac地址

IOS7之后mac地址返回的值已經(jīng)固定做修,不能作為唯一標(biāo)識(shí)符了。

3.供應(yīng)商標(biāo)示符(IDFV)

identifierForVendor對(duì)供應(yīng)商來(lái)說(shuō)是唯一的一個(gè)值抡草,也就是說(shuō)饰及,由同一個(gè)公司發(fā)行的的app在相同的設(shè)備上運(yùn)行的時(shí)候都會(huì)有這個(gè)相同的標(biāo)識(shí)符。然而康震,如果用戶(hù)刪除了這個(gè)供應(yīng)商的app然后再重新安裝的話(huà)燎含,這個(gè)標(biāo)識(shí)符就會(huì)不一致。

4.OpenUDID

原理是利用iOS系統(tǒng)中的UIPasteboard剪貼板類(lèi)腿短,iOS7.0以前iOS是所有的應(yīng)用都可以共享同一個(gè)剪貼板存儲(chǔ)內(nèi)容屏箍,但是iOS7之后只有在同一CFBundleIdentifier標(biāo)識(shí)下的App才能共享內(nèi)容。

5.UUID

UUID是Universally Unique Identifier的縮寫(xiě)橘忱,每次獲取的值都不相同赴魁,但每個(gè)值都是唯一的,可以選擇存入keychain存儲(chǔ)钝诚,實(shí)現(xiàn)keychain數(shù)據(jù)共享的話(huà)颖御,可以作為多應(yīng)用的唯一標(biāo)識(shí)

6. 廣告標(biāo)示符(IDFA)

主要用于廣告,可能會(huì)獲取不到凝颇,iOS用戶(hù)也可以 設(shè)置|隱私|廣告追蹤 里重置此id的值潘拱,不適用作為手機(jī)唯一標(biāo)識(shí)


鑰匙串多應(yīng)用數(shù)據(jù)共享

鑰匙串里的值并不隨著客戶(hù)刪除應(yīng)用就刪除了,這樣為我們跨APP唯一標(biāo)識(shí)提供了一個(gè)很好的方法拧略。

我們只需要?jiǎng)?chuàng)建一個(gè)UUID芦岂,保存到鑰匙串中,在程序中把鑰匙串?dāng)?shù)據(jù)共享打開(kāi)辑鲤,加入我們需要分享的APP的bundle identifier盔腔,這樣我們只要在每個(gè)APP中判斷UUID是否存在,存在的話(huà)直接拿來(lái)用月褥,不存在的話(huà)弛随,創(chuàng)建一個(gè)UUID存到鑰匙串,這樣就可以做成一個(gè)多應(yīng)用間唯一標(biāo)識(shí)宁赤。

1.下面是大概的流程

獲取UUID

+(NSString*)UUID

{

CFUUIDRefpuuid=CFUUIDCreate(nil);

CFStringRefuuidString=CFUUIDCreateString(nil,puuid);

NSString*result=(NSString*)CFBridgingRelease(CFStringCreateCopy(NULL,uuidString));

CFRelease(puuid);

CFRelease(uuidString);

NSLog(@"uuid=%@",result);

returnresult;

}

鑰匙串方法與共享

查看是否有UUID舀透,有就用,沒(méi)有的話(huà)就添加UUID

NSString*accountKey=@"user_token_sharing";

NSString*accountName=@"Citics";

if([GIKeychaingetKeychainDataForKey:accountKey]) {

NSLog(@"該key內(nèi)容已經(jīng)存在,為:%@",[GIKeychaingetKeychainDataForKey:accountKey]);

}else{

NSLog(@"該key不存在决左,準(zhǔn)備寫(xiě)入");

[GIKeychainaddKeychainData:accountNameforKey:accountKey];

NSLog(@"已寫(xiě)入愕够,該key內(nèi)容:%@",[GIKeychaingetKeychainDataForKey:accountKey]);

}

鑰匙串獲取UUID

+(id)getKeychainDataForKey:(NSString*)key{

idret=nil;

NSMutableDictionary*keychainQuery=[selfgetKeychainQuery:key];

//Configure the search setting

//Since in our simple case we are expecting only a single attribute to be returned (the password) we can set the attribute kSecReturnData to kCFBooleanTrue

[keychainQuerysetObject:(id)kCFBooleanTrueforKey:(__bridgeid)kSecReturnData];

[keychainQuerysetObject:(__bridgeid)kSecMatchLimitOneforKey:(__bridgeid)kSecMatchLimit];

CFDataRefkeyData=NULL;

if(SecItemCopyMatching((__bridgeCFDictionaryRef)keychainQuery, (CFTypeRef*)&keyData)==noErr) {

@try{

ret=[NSKeyedUnarchiverunarchiveObjectWithData:(__bridgeNSData*)keyData];

}@catch(NSException*e) {

NSLog(@"Unarchive of %@ failed: %@",key,e);

}@finally{

? ? ? ? ? ? ? ? }

? ? ? ?}

if(keyData)

CFRelease(keyData);

returnret;

}

?

鑰匙串添加UUID

+(void)addKeychainData:(id)dataforKey:(NSString*)key{

//Get search dictionary

NSMutableDictionary*keychainQuery=[selfgetKeychainQuery:key];

//Delete old item before add new item

SecItemDelete((__bridgeCFDictionaryRef)keychainQuery);

//Add new object to search dictionary(Attention:the data format)

[keychainQuerysetObject:[NSKeyedArchiverarchivedDataWithRootObject:data]forKey:(__bridgeid)kSecValueData];

//Add item to keychain with the search dictionary

SecItemAdd((__bridgeCFDictionaryRef)keychainQuery,NULL);

}

鑰匙串共享

到此走贪,我們需要在共享的APP上按以上流程寫(xiě)一遍,這樣就可以成功定義多個(gè)應(yīng)用唯一的標(biāo)識(shí)了惑芭!

GIKeychain下載地址

http://pan.baidu.com/s/1bp887yJ

注意:鑰匙串中共享只支持team間的APP共享坠狡,不支持與其他team的APP之間共享!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末遂跟,一起剝皮案震驚了整個(gè)濱河市逃沿,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌幻锁,老刑警劉巖凯亮,帶你破解...
    沈念sama閱讀 218,284評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異哄尔,居然都是意外死亡假消,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)岭接,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)富拗,“玉大人,你說(shuō)我怎么就攤上這事亿傅∶较浚” “怎么了瘟栖?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,614評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵葵擎,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我半哟,道長(zhǎng)酬滤,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,671評(píng)論 1 293
  • 正文 為了忘掉前任寓涨,我火速辦了婚禮盯串,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘戒良。我一直安慰自己体捏,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,699評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布糯崎。 她就那樣靜靜地躺著几缭,像睡著了一般。 火紅的嫁衣襯著肌膚如雪沃呢。 梳的紋絲不亂的頭發(fā)上年栓,一...
    開(kāi)封第一講書(shū)人閱讀 51,562評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音薄霜,去河邊找鬼某抓。 笑死纸兔,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的否副。 我是一名探鬼主播汉矿,決...
    沈念sama閱讀 40,309評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼备禀!你這毒婦竟也來(lái)了负甸?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,223評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤痹届,失蹤者是張志新(化名)和其女友劉穎呻待,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體队腐,經(jīng)...
    沈念sama閱讀 45,668評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蚕捉,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,859評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了柴淘。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片迫淹。...
    茶點(diǎn)故事閱讀 39,981評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖为严,靈堂內(nèi)的尸體忽然破棺而出敛熬,到底是詐尸還是另有隱情,我是刑警寧澤第股,帶...
    沈念sama閱讀 35,705評(píng)論 5 347
  • 正文 年R本政府宣布应民,位于F島的核電站,受9級(jí)特大地震影響夕吻,放射性物質(zhì)發(fā)生泄漏诲锹。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,310評(píng)論 3 330
  • 文/蒙蒙 一涉馅、第九天 我趴在偏房一處隱蔽的房頂上張望归园。 院中可真熱鬧,春花似錦稚矿、人聲如沸庸诱。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,904評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)桥爽。三九已至,卻和暖如春碉渡,著一層夾襖步出監(jiān)牢的瞬間聚谁,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,023評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工滞诺, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留形导,地道東北人环疼。 一個(gè)月前我還...
    沈念sama閱讀 48,146評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像朵耕,于是被迫代替她去往敵國(guó)和親炫隶。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,933評(píng)論 2 355

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