iOS獲取設備唯一標識的各種方法?IDFA、IDFV、UDID分別是什麼含義?

来源:http://www.cnblogs.com/lurenq/archive/2017/11/09/7808520.html
-Advertisement-
Play Games

iOS獲取設備唯一標識的各種方法?IDFA、IDFV、UDID分別是什麼含義? [摘要:1、UDID (Unique Device Identifier) UDID的齊稱是Unique Device Identifier,望文生義,它便是蘋果IOS裝備的獨一辨認碼,它由40個字元的字母戰數字構成。正 ...


iOS獲取設備唯一標識的各種方法?IDFA、IDFV、UDID分別是什麼含義?

[摘要:1、UDID (Unique Device Identifier) UDID的齊稱是Unique Device Identifier,望文生義,它便是蘋果IOS裝備的獨一辨認碼,它由40個字元的字母戰數字構成。正在良多須要限定] 
 

一、UDID (Unique Device Identifier)

	UDID的全稱是Unique Device Identifier,顧名思義,它就是蘋果IOS設備的唯一識別碼,它由40個字元的字母和數字組成。在很多需要限制一臺設備一個賬號的應用中經常會用到。在iOS5中可以獲取到設備的UDID,後來被蘋果禁止了。

二、UUID(Universally Unique Identifier)

	UUID是Universally Unique Identifier的縮寫,中文意思是通用唯一識別碼。它是讓分散式系統中的所有元素,都能有唯一的辨識資訊,而不需要透過中央控制端來做辨識資訊的指定。這樣,每個人都可以建立不與其它人衝突的 UUID。在此情況下,就不需考慮資料庫建立時的名稱重覆問題。蘋果公司建議使用UUID為應用生成唯一標識字元串。
 
	開發者可以在應用第一次啟動時調用一 次,然後將該串存儲起來,替代UDID來使用。但是,如果用戶刪除該應用再次安裝時,又會生成新的字元串,所以不能保證唯一識別該設備。使用UUID,就要考慮應用被刪除後再重新安裝時的處理。一個解決的辦法是:UUID一般只生成一次,保存在iOS系統裡面,如果應用刪除了,重裝應用之後它的UUID還是一樣的,除非系統重置 。但是不能保證在以後的系統升級後還能用(如果系統保存了該信息就能用)。

三、MAC Address

用來表示互聯網上每一個站點的標識符,採用十六進位數表示,共六個位元組(48位)。其中,前三個位元組是由IEEE的註冊管理機構 RA負責給不同廠家分配的代碼(高位24位),也稱為“編製上唯一的標識符” (Organizationally Unique Identifier),後三個位元組(低位24位)由各廠家自行指派給生產的適配器介面,稱為擴展標識符(唯一性)。

MAC地址在網路上用來區分設備的唯一性,接入網路的設備都有一個MAC地址,他們肯定都是不同的,是唯一的。一部iPhone上可能有多個MAC地址,包括WIFI的、SIM的等,但是iTouch和iPad上就有一個WIFI的,因此只需獲取WIFI的MAC地址就好了,也就是en0的地址。 MAC地址就如同我們身份證上的身份證號碼,具有全球唯一性。這樣就可以非常好的標識設備唯一性,類似與蘋果設備的UDID號,通常的用途有:1)用於一些統計與分析目的,利用用戶的操作習慣和數據更好的規劃產品;2)作為用戶ID來唯一識別用戶,可以用游客身份使用app又能在伺服器端保存相應的信息,省去用戶名、密碼等註冊過程。 使用Mac地址生成設備的唯一標識主要分三種: 1、直接使用“MAC Address”  2、使用“MD5(MAC Address)”
3、使用“MD5(Mac Address+bundle_id)”獲得“機器+應用”的唯一標識(bundle_id 是應用的唯一標識) 在iOS7之後,如果請求Mac地址都會返回一個固定值。

四、IDFA(identifierForIdentifier)

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

	是iOS 6中另外一個新的方法,提供了一個方法advertisingIdentifier,通過調用該方法會返回一個NSUUID實例,最後可以獲得一個UUID,由系統存儲著的。不過即使這是由系統存儲的,但是有幾種情況下,會重新生成廣告標示符。如果用戶完全重置系統((設置程式 -> 通用 -> 還原 -> 還原位置與隱私) ,這個廣告標示符會重新生成。另外如果用戶明確的還原廣告(設置程式-> 通用 -> 關於本機 -> 廣告 -> 還原廣告標示符) ,那麼廣告標示符也會重新生成。關於廣告標示符的還原,有一點需要註意:如果程式在後臺運行,此時用戶“還原廣告標示符”,然後再回到程式中,此時獲取廣 告標示符並不會立即獲得還原後的標示符。必須要終止程式,然後再重新啟動程式,才能獲得還原後的廣告標示符。

在同一個設備上的所有App都會取到相同的值,是蘋果專門給各廣告提供商用來追蹤用戶而設的,用戶可以在 設置|隱私|廣告追蹤 里重置此id的值,或限制此id的使用,故此id有可能會取不到值,但好在Apple預設是允許追蹤的,而且一般用戶都不知道有這麼個設置,所以基本上用來監測推廣效果,是戳戳有餘了。

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

代碼:

#import <AdSupport/AdSupport.h>

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

 

五、IDFV(identifierForVendor)

Vindor標示符,適用於對內:例如分析用戶在應用內的行為等。

是給Vendor標識用戶用的,每個設備在所屬同一個Vender的應用里,都有相同的值。其中的Vender是指應用提供商,但準確點說,是通過BundleID的DNS反轉的前兩部分進行匹配,如果相同就是同一個Vender,例如對於com.somecompany.appone,com.somecompany.apptwo 這兩個BundleID來說,就屬於同一個Vender,共用同一個idfv的值。和idfa不同的是,idfv的值是一定能取到的,所以非常適合於作為內部用戶行為分析的主id,來標識用戶,替代OpenUDID。

註意:如果用戶將屬於此Vender的所有App卸載,則idfv的值會被重置,即再重裝此Vender的App,idfv的值和之前不同。

代碼:

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

 

六、OPEN UDID

	每台iOS設備的OpenUDID是通過第一個帶有OpenUDID SDK包的App生成,如果你完全刪除全部帶有OpenUDID SDK包的App(比如恢復系統等),那麼OpenUDID會重新生成,而且和之前的值會不同,相當於新設備;
	優點是沒有用到MAC地址;不同設備能夠獲取各自唯一的識別碼,保證了唯一性,可以用於以往UDID的相關用途;從代碼分析OpenUDID的獲取,識別碼獲取方便並且保存謹慎。缺點是當將設備上所有使用了OpenUDID方案的應用程式刪除,且設備關機重啟,xcode徹底清除並重啟,重裝應用程式去獲取OpenUDID,此時OpenUDID變化,與之前不一樣了,所有OpenUDID應用卸載後,由UIPasteboard保存的數據即被清除,重裝故會重新獲取新的OpenUDID。

那麼當因為用戶干預或者惡意程式,致使UIPasteboard數據清除,從而導致OpenUDID被刪除,重裝也會獲取新的OpenUDID。

OpenUDID生成唯一識別碼的代碼:

 

  1. unsigned char result[16];  
  2.         const charchar *cStr = [[[NSProcessInfo processInfo] globallyUniqueString] UTF8String];  
  3.         CC_MD5( cStr, strlen(cStr), result );  
  4.         _openUDID = [NSString stringWithFormat:  
  5.                      @"%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%08x",  
  6.                      result[0], result[1], result[2], result[3],   
  7.                      result[4], result[5], result[6], result[7],  
  8.                      result[8], result[9], result[10], result[11],  
  9.                      result[12], result[13], result[14], result[15],  
  10.                      arc4random() % 4294967295]; 

 

 

 

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 在Activity 的啟動過程中,調用ActivityThread 的handleResumeActivity 方法時,先得到一個與Activity 關聯的PhoneWindow 對象,然後通過PhoneWindow 來獲取DecorView。 PhoneWindow.java DecorView ...
  • iOS UImage 與 RGB 裸數據的相互轉換 Touch the data of image in iOS Get data from a image 較簡單,根據已有的 image 的屬性,創建 CGBitmapContext, 這個 context 是帶有直接訪問的指針的。然後將 Imag ...
  • 內部使用了OKIO庫, 此庫中Source表示輸入流(相當於InputStream),Sink表示輸出流(相當於OutputStream) 特點: ·既支持同步請求,也支持非同步請求,同步請求會阻塞當前線程,非同步請求不阻塞當前線程,非同步執行完成後回掉相應的方法 ·支持HTTP/2協議,通過HTTP/2 ...
  • 一、讓iOS App通過iTunes進行文件交換Documents 讓iOS App通過iTunes進行文件交換 有一些App需要通過使用iTunes讓用戶上傳和下載文檔。要讓iOS程式支持iTunes文件交換其實很簡單, 只需要在程式的Info.plist里增加一個鍵:UIFileSharingE ...
  • 1. Application does not run in background(鍵名:UIApplicationExistsOnSuspend)自從iOS4.0之後,當你在應用程式執行的時候按下Home鍵,應用程式並不會中斷目前的執行,而是躲到背景去了。因此希望使用者在按下Home鍵之後就要中斷 ...
  • 最近在學習視頻相關的知識,現在也是在按部就班的一步步的來,如果有同樣需求的同學可以跟著大家一起促進學習。 上一節說到了可以使用系統播放器以及瀏覽器播放本地以及網路視頻,但是這在很大程度上並不能滿足我們的需求,幸好,android系統為我們提供了一個很方便的系統API——VideoView,來支持我們 ...
  • http://m.blog.csdn.net/potato512/article/details/51487643 ...
  • (1)什麼是IDFA 關於IDFA,在提交應用到App Store時,iTunes Connect有如下說明: 這裡說到檢查項目中是否包含IDFA,那如何來對iOS項目(包括第三方SDK)檢查是否包含IDFA呢? (2)檢查IDFA的方法: 步驟: 1、打開終端cd到要檢查的文件的根目錄。 2、執行 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...