iOS獲取手機唯一識別符號來(IDFA和UUID)

2021-08-15 07:03:53 字數 3472 閱讀 4514

廣告標示符,適用於對外:例如廣告推廣,換量等跨應用的使用者追蹤等。

是ios 6中另外乙個新的方法,提供了乙個方法advertisingidentifier,通過呼叫該方法會返回乙個nsuuid例項,最後可以獲得乙個uuid,由系統儲存著的。不過即使這是由系統儲存的,但是有幾種情況下,會重新生成廣告標示符。如果使用者完全重置系統((設定程式 -> 通用 -> 還原 -> 還原位置與隱私) ,這個廣告標示符會重新生成。另外如果使用者明確的還原廣告(設定程式-> 通用 -> 關於本機 -> 廣告 -> 還原廣告標示符) ,那麼廣告標示符也會重新生成。關於廣告標示符的還原,有一點需要注意:如果程式在後台執行,此時使用者「還原廣告標示符」,然後再回到程式中,此時獲取廣 告標示符並不會立即獲得還原後的標示符。必須要終止程式,然後再重新啟動程式,才能獲得還原後的廣告標示符。

注意:由於idfa會出現取不到的情況,故絕不可以作為業務分析的主id,來識別使用者。 

因此,idfa就是用來跟蹤廣告推廣的,而uuid雖然每次不同,但是可以自己手動存入keychain來進行唯一性的確保,這麼說來idfa就是如果廣告商投放的時候使用,而uuid就是自己後台來判斷使用者是否換了裝置,或者資訊不一致需要重新登入的業務 

知乎上看到乙個非常詳細介紹idfa的文章 

了解idfa,看我這篇文章就夠了

這是ios 6中另外乙個新的方法,advertisingidentifier是新框架adsupport.framework的一部分。asidentifiermanager單例提供了乙個方法advertisingidentifier,通過呼叫該方法會返回乙個上面提到的nsuuid例項。

// 獲取

// 需要匯入adsupport.framework這個庫

#import nsstring *idfa = [[[asidentifiermanager sharedmanager] advertisingidentifier] uuidstring];

// 判斷是否開啟

// 判斷是否開啟 限制廣告跟蹤選項(該選項在設定-隱私-廣告-限制廣告隱私)

boolean on = [[asidentifiermanager sharedmanager] isadvertisingtrackingenabled];

ios10之前開關限制廣告追蹤選項的確沒什麼用,ios10之後,如果手機開啟限制廣告追蹤的話就不能再得到廣告識別符號,得到的是下面的0。這個開關是乙個簡單的boolean標誌,當將廣告標示符發到任意的伺服器端時,你最好判斷一下這個值,然後再做決定。

//開啟的時候

2016-01-05 15:22:19.218 sss[1773:60b] 41b2fd07-695a-4a27-8d26-c30ece6f7ead

2016-01-05 15:22:19.233 sss[1773:60b] 0

// 關閉的時候

2016-01-05 15:19:57.502 sss[1763:60b] 7773e145-26ff-4304-a60f-60c948d52b40

2016-01-05 15:19:57.516 sss[1763:60b] 1

開啟和關閉切換的話,idfa會變,如果不切換,保持開啟狀態,每次都是不會變的,當切換了下之後就會變,或者還原的話會變

// 獲取idfa的方法

+ (nsstring *)getidfa

}#pragma clang diagnostic pop

return nil;

}

cfuuid—>2.0出現

nsuuid—>6.0出現

這兩個乙個是cf框架下的,乙個更加物件導向,獲取的時候更方便而已,其實獲取到的都是同乙個東西

針對cfuuid需要注意的是:獲得的這個cfuuid值系統並沒有儲存。每次呼叫cfuuidcreate,系統都會返回乙個新的唯一標示符。如果你希望儲存這個標示符,那麼需要自己將其儲存到nsuserdefaults, keychain, pasteboard或其它地方

+ (nsstring *)getuuid

[[nsuserdefaults standarduserdefaults] setobject:uniquekeyitem forkey:opensessionid];

[[nsuserdefaults standarduserdefaults] synchronize];

// nslog(@"uniquekeyitem: %@",uniquekeyitem);

openuuid = uniquekeyitem;

}// nslog(@"openuuid 三: %@",openuuid);

return openuuid;

}

1.首先從沙盒獲取,沒有的話就呼叫cf方法獲取,然後再去keychain獲取,如果沒獲取到,把剛才獲取到的uuid儲存到keychain,由於keychain你不刷機,儲存的東西會一直存在,因此保證了唯一性,每次獲取的都是從keychain獲取到的第一次儲存進去的值,那麼請求的時候,後台根據使用者主鍵盤點uuid是否更改從而判斷是否換了終端登入,進行彈框提示

總結:1.idfa在使用者重置廣告標誌符的時候會變化,所以可以把第一次生成的idfa存放到keychain裡面,以後就直接讀取keychain值就可以了,這樣就能避免使用者重置廣告標誌符造成idfa的變化,而keychain的值只有在使用者重置系統的時候才會刪除,所以很適合用idfa+keychain的方案

如何確定是否需要選擇idfa???先看看下面的終端使用判斷是否需要勾選

4、對使用廣告識別符號做確認

服務應用中的廣告。如果你的應用中整合了廣告的時候,你需要勾選這一項。

跟蹤廣告帶來的安裝。如果你使用了第三方的工具來跟蹤廣告帶來的啟用以及一些其他事件,但是應用裡並沒有展示廣告你需要勾選這一項。

跟蹤廣告帶來的使用者的後續行為。如果你使用了第三方的工具來跟蹤廣告帶來的啟用以及一些其他事件,但是應用裡並沒有展示廣告你需要勾選第2項和第3項。

下邊還有一項

4.limit ad tracking setting in ios

這一項下的內容其實就是對你的應用使用idfa的目的做下確認,只要你選擇了採集idfa,那麼這一項都是需要勾選的。

總結一下,

(1)如果你的應用裡只是整合了廣告,不追蹤廣告帶來的啟用行為,那麼選擇1和4;

(2)如果你的應用裡沒有整合廣告,但是需要追蹤廣告帶來的啟用行為,那麼選擇2,3和4;

(3)如果你的應用裡整合了廣告,而且使用了sdk等用來追蹤廣告帶來的啟用行為,需要選擇1,2,3和4 。

個人理解:當你有用到idfa的時候,你是必須要勾選yes的,14年的時候很嚴格,剩下四個選項如果你選錯了很容易悲劇,現在感覺如果你選了yes,然後在找個合適的理由勾選,基本上沒問題了,例如你整合了umeng的idfa sdk,然後你有啟動廣告,你選1和4,一樣ok了

關於iOS獲取手機唯一識別符號

同樣的,openudid 也不能用了 更詳細的操作,可以參考這篇 如何使用keychain儲存和獲取udid 下面的內容 網易杭州 qa team 在ios系統中,獲取裝置唯一標識的方法有很多 一.udid unique device identifier 二.uuid universally un...

iOS獲取裝置唯一識別符號

在開發中會遇到應用需要記錄裝置標示,即使應用解除安裝後再安裝也可重新識別的情況,在這寫一種實現方式 讀取裝置的uuid universally unique identifier 並通過keychain記錄。首先儲存裝置的uuid,可以使用類方法 id uuid 是乙個類方法,呼叫該方法可以獲得乙個...

iOS唯一識別符號

在2013年3月21日蘋果已經通知開發者,從2013年5月1日起,替代的方案是開發者應該使用 在ios 6中介紹的vendor或advertising標示符 cfuuid方法用來建立cfuuidref,並且可以獲得乙個相應的nsstring,如下 cfuuidref cfuuid cfuuidcre...