成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

iOS開發(fā)中唯一標(biāo)示符引導(dǎo)

移動開發(fā) iOS
unique Identifier即將退出,蘋果給了我們Vendor和Advertising identifier兩個選擇,但應(yīng)該用哪一個?文檔并沒有給出確切答案,具體使用哪個完全由你根據(jù)自己app的目的來決定。

[[71170]]

在2013年3月21日蘋果已經(jīng)通知開發(fā)者,從2013年5月1日起,訪問UIDID的應(yīng)用將不再能通過審核,替代的方案是開發(fā)者應(yīng)該使用“在iOS 6中介紹的Vendor或Advertising標(biāo)示符”。

unique Identifier即將退出,蘋果給了我們Vendor和Advertising identifier兩個選擇,但應(yīng)該用哪一個?文檔并沒有給出確切答案,具體使用哪個完全由你根據(jù)自己app的目的來決定。下面我將列出iOS中目前支 持的,以及被廢棄的唯一標(biāo)示符方法,并對其做出相應(yīng)的解釋,希望可以幫你做出正確的確定。

CFUUID

從iOS2.0開始,CFUUID就已經(jīng)出現(xiàn)了。它是CoreFoundatio包的一部分,因此API屬于C語言風(fēng)格。CFUUIDCreate 方法用來創(chuàng)建CFUUIDRef,并且可以獲得一個相應(yīng)的NSString,如下代碼:

CFUUIDRef cfuuid = CFUUIDCreate(kCFAllocatorDefault);NSString *cfuuidString = (NSString*)CFBridgingRelease(CFUUIDCreateString(kCFAllocatorDefault, cfuuid));

獲得的這個CFUUID值系統(tǒng)并沒有存儲。每次調(diào)用CFUUIDCreate,系統(tǒng)都會返回一個新的唯一標(biāo)示符。如果你希望存儲這個標(biāo)示符,那么需要自己將其存儲到NSUserDefaults, Keychain, Pasteboard或其它地方。

NSUUID

NSUUID在iOS 6中才出現(xiàn),這跟CFUUID幾乎完全一樣,只不過它是Objective-C接口。+ (id)UUID 是一個類方法,調(diào)用該方法可以獲得一個UUID。通過下面的代碼可以獲得一個UUID字符串:

 

  1. NSString *uuid = [[NSUUID UUID] UUIDString]; 

跟CFUUID一樣,這個值系統(tǒng)也不會存儲,每次調(diào)用的時候都會獲得一個新的唯一標(biāo)示符。如果要存儲的話,你需要自己存儲。在我讀取NSUUID時,注意到獲取到的這個值跟CFUUID完全一樣(不過也可能不一樣):

示例: 68753A44-4D6F-1226-9C60-0050E4C00067

廣告標(biāo)示符(IDFA-identifierForIdentifier)

這是iOS 6中另外一個新的方法,advertisingIdentifier是新框架AdSupport.framework的一部分。ASIdentifierManager單例提供了一個方法advertisingIdentifier,通過調(diào)用該方法會返回一個上面提到的NSUUID實例。

 

  1. NSString *adId = [[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString]; 

跟CFUUID和NSUUID不一樣,廣告標(biāo)示符是由系統(tǒng)存儲著的。不過即使這是由系統(tǒng)存儲的,但是有幾種情況下,會重新生成廣告標(biāo)示符。如果用戶 完全重置系統(tǒng)((設(shè)置程序 -> 通用 -> 還原 -> 還原位置與隱私) ,這個廣告標(biāo)示符會重新生成。另外如果用戶明確的還原廣告(設(shè)置程序-> 通用 -> 關(guān)于本機 -> 廣告 -> 還原廣告標(biāo)示符) ,那么廣告標(biāo)示符也會重新生成。關(guān)于廣告標(biāo)示符的還原,有一點需要注意:如果程序在后臺運行,此時用戶“還原廣告標(biāo)示符”,然后再回到程序中,此時獲取廣 告標(biāo)示符并不會立即獲得還原后的標(biāo)示符。必須要終止程序,然后再重新啟動程序,才能獲得還原后的廣告標(biāo)示符。之所以會這樣,我猜測是由于 ASIdentifierManager是一個單例。

針對廣告標(biāo)示符用戶有一個可控的開關(guān)“限制廣告跟蹤”。Nick Arnott的文章中已經(jīng)指出了。將這個開關(guān)打開,實際上什么也沒有做,不過這是希望限制你訪問廣告標(biāo)示符。這個開關(guān)是一個簡單的boolean標(biāo)志,當(dāng)將廣告標(biāo)示符發(fā)到任意的服務(wù)器端時,你最好判斷一下這個值,然后再做決定。

示例: 1E2DFA89-496A-47FD-9941-DF1FC4E6484A

Vindor標(biāo)示符 (IDFV-identifierForVendor)

這種叫法也是在iOS 6中新增的,不過獲取這個IDFV的新方法被添加在已有的UIDevice類中。跟advertisingIdentifier一樣,該方法返回的是一個NSUUID對象。

 

  1. NSString *idfv = [[[UIDevice currentDevice] identifierForVendor] UUIDString]; 

蘋果官方的文檔中對identifierForVendor有如下這樣的一段描述 :

The value of this property is the same for apps that come from the same vendor running on the same device. A different value is returned for apps on the same device that come from different vendors, and for apps on different devices regardless of vendor.

如果滿足這樣的條件,那么獲取到的這個屬性值就不會變:相同的一個程序里面-相同的vindor-相同的設(shè)備。如果是這樣的情況,那么這個值是不會相同的:相同的程序-相同的設(shè)備-不同的vindor,或者是相同的程序-不同的設(shè)備-無論是否相同的vindor。

看完上面的內(nèi)容,我有這樣的一個疑問“vendor是什么”。我首先想到的是蘋果開發(fā)者賬號。但事實證明這是錯誤的。接著我想可能是有一個 AppIdentifierPrefix東西,跟鑰匙串訪問一樣,可以在多個程序間共享。同樣,這個想法也是的。最后證明,vendor非常簡單:一個 Vendor是CFBundleIdentifier(反轉(zhuǎn)DNS格式)的前兩部分。例如,com.doubleencore.app1 和 com.doubleencore.app2 得到的identifierForVendor是相同的,因為它們的CFBundleIdentifier 前兩部分是相同的。不過這樣獲得的identifierForVendor則完全不同:com.massivelyoverrated 或 net.doubleencore。

在這里,還需要注意的一點就是:如果用戶卸載了同一個vendor對應(yīng)的所有程序,然后在重新安裝同一個vendor提供的程序,此時identifierForVendor會被重置。

示例: 599F9C00-92DC-4B5C-9464-7971F01F8370

UDID

在之前的版本中是可用的,但是在iOS5以及之后的版本中,以及被棄用了。雖然,這個UDID用得很廣泛,但是,不得不說的是,它在慢慢的遠離開發(fā)者,不 能在考慮使用UDID了。至于這個標(biāo)示符是轉(zhuǎn)為私有方法,或者完全從以后的iOS版本中移除,還有待觀察。不過,這個UDID在部署企業(yè)級簽名程序時,非 常方便。獲取UDID的方法如下:

 

  1. NSString *udid = [[UIDevice currentDevice] uniqueIdentifier]; 

示例: bb4d786633053a0b9c0da20d54ea7e38e8776da4

OpenUDID

在iOS 5發(fā)布時,uniqueIdentifier被棄用了,這引起了廣大開發(fā)者需要尋找一個可以替代UDID,并且不受蘋果控制的方案。由此OpenUDID成為了當(dāng)時使用最廣泛的開源UDID替代方案。OpenUDID在工程中實現(xiàn)起來非常簡單,并且還支持一系列的廣告提供商。

 

  1. NSString *openUDID = [OpenUDID value]; 

OpenUDID利用了一個非常巧妙的方法在不同程序間存儲標(biāo)示符 — 在粘貼板中用了一個特殊的名稱來存儲標(biāo)示符。通過這種方法,別的程序(同樣使用了OpenUDID)知道去什么地方獲取已經(jīng)生成的標(biāo)示符(而不用再生成一個新的)。

之前已經(jīng)提到過,在將來,蘋果將開始強制使用advertisingIdentifier 或identifierForVendor。如果這一天到來的話,即使OpenUDID看起來是非常不錯的選擇,但是你可能不得不過渡到蘋果推出的方法。

示例: 0d943976b24c85900c764dd9f75ce054dc5986ff

總結(jié)

希望上面的信息能夠幫助你在程序使用選擇正確的唯一標(biāo)示符。在這里,我創(chuàng)建了一個小的唯一標(biāo)示符測試程序,你可以運行該程序,并查看一下顯示的內(nèi)容(包括上面提到的所有標(biāo)示符)。另外,下面有兩個表,表中描述了兩個內(nèi)容:在iOS中的可用性,以及什么時候可以獲得重置的標(biāo)示符。

* 程序必須重啟才能看到改變的效果。
** 刪除了所有相同vendor提供的程序,才能看到改變的值。

責(zé)任編輯:閆佳明 來源: cocoachina
相關(guān)推薦

2023-05-28 00:09:21

2022-07-17 06:57:02

時間戳唯一標(biāo)識符

2024-04-07 00:00:02

Android設(shè)備標(biāo)識符

2009-12-08 19:29:10

PHP生成唯一標(biāo)識符

2012-09-11 10:45:45

2014-12-15 14:02:48

iOS版本號蘋果

2015-03-18 09:29:12

iOS開發(fā)爭議

2011-08-16 15:17:44

IOS SDK

2010-03-04 15:20:30

Linux優(yōu)盤引導(dǎo)安裝

2015-10-20 11:22:34

iOS開發(fā)Git

2013-07-25 13:30:35

iOS開發(fā)學(xué)習(xí)讀取照片庫

2013-07-22 14:38:00

iOS開發(fā)ASIHTTPRequ

2024-04-01 13:08:24

唯一IDC#后端

2010-05-10 14:51:56

Unix系統(tǒng)

2015-04-07 12:17:26

新手引導(dǎo)手游引導(dǎo)

2021-11-08 19:25:37

Go生成系統(tǒng)

2014-02-19 09:51:29

iOS開發(fā)時間處理

2014-04-23 14:40:06

iOS開發(fā)KVO內(nèi)部實現(xiàn)

2013-07-22 13:48:55

iOS開發(fā)ASIHTTPRequ使用Cookie

2014-02-19 09:59:52

iOS開發(fā)Html解析
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 久久久精品影院 | 成年人免费网站 | 三级在线视频 | 午夜影院操 | 999www视频免费观看 | 在线观看亚洲专区 | 人操人人 | 在线一区 | 日韩不卡三区 | 黄网站在线播放 | 波多野结衣电影一区 | 中国av在线免费观看 | av色站 | 一区在线观看 | 天堂精品视频 | 国产欧美久久一区二区三区 | 一区二区影院 | 亚洲精品乱码久久久久久9色 | 亚洲第一网站 | 91中文在线观看 | 国产一区二区三区色淫影院 | 草草视频在线观看 | 毛片免费视频 | 99久久婷婷国产亚洲终合精品 | 97伦理| 天天看天天操 | 国产成人亚洲精品自产在线 | 亚洲美女一区 | 国产一区久久 | 久久久久久亚洲国产精品 | 欧美亚洲视频在线观看 | 欧美天堂 | 亚洲在线日韩 | 国产成人91 | 免费观看一级特黄欧美大片 | 亚洲精品国产成人 | 成人网址在线观看 | 91久久精品一区二区三区 | 久久精品一区 | 久久一视频 | 亚洲一区二区 |