獲取設備當前信息、新用戶統(tǒng)計及新用戶來源追蹤
設備標識
IDFA (32 位)
- 廣告標識符 - Apple 專門給各廣告提供商用來追蹤用戶設置的32位標識符。默認設置為允許追蹤。???設置 - 隱私 - 廣告 可以自行設置。在被允許訪問的情況下,卸載之后?再安裝,該字符串保持不變。在不被允許情況下,iOS10 開始開發(fā)者將會讀取到32位全0的字符串;iOS10之前版本即便不被允許,開發(fā)者還是可以取到32位字符串,只是這時的字符串不同于被允許情況下的字符串,而且還有可能發(fā)生變化(這種情況測試設備為 iPhone6 - 中國電信 - iOS9.2 - 未越獄 - MG4H2J/A)。
[[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString]
UDID (40 位)
- UDID [Unique Device Identifier Description] - Apple 提供的用來區(qū)別每一個iOS設備(iPhone、iPad、iPod)的由字母和數(shù)字組成的40位字符串。該字符串與硬件設備相關。開發(fā)者會注意到,添加測試機時就需要先獲取該字符串,這是因為Apple的消息推送功能及區(qū)分不同應用程序功能上都有用到該字符串。由于該字符串涉及用戶隱私,所以Apple在iOS5之后禁止開發(fā)者試圖獲取該字符串;否則應用將被禁止上架。
IDFV
- IDFV [identifierForVendor] - 給Vendor用以標識用戶的32位字符串,每個設備在所屬同一個Vendor的應用里具有相同的值;雖然該標識一定可以讀取到,但卸載以后再安裝該字符串的讀取值會發(fā)生變化。
MAC地址
- 在iOS 7中蘋果再一次無情的封殺mac地址,使用之前的方法獲取到的mac地址全部都變成了02:00:00:00:00:00。
Keychain (該部分設置可參考 Demo)
- 我們可以把 Keychain 理解為一個 Dictionary,其中的數(shù)據(jù)均以key-value的形式存儲,可以對該Dictionary進行add、update、get、delete四個操作。
- 對于每一個應用來說,Keychain 都有兩個訪問區(qū)即私有區(qū)和公共區(qū)。私有區(qū)是一個 sandbox ,本程序存儲的任何數(shù)據(jù)對其他程序不可見。而要將數(shù)據(jù)存儲在公共區(qū),需要先聲明公共區(qū)的名稱。
- iOS的 Keychain 服務提供了一種安全的保存私密信息的方式,每個iOS應用程序均有一個獨立的 Keychain 存儲。Keychain存儲的信息不會因APP的刪除而丟失,只要是同一個APP(bunldid),即便重新安裝,依舊可以讀取到Keychain里存儲的數(shù)據(jù)。
- 這樣就可以將獲取到 UUID ,保存到KeyChain里面。
- 刷機或重裝系統(tǒng)后 UUID 還是會改變。
- 倘若只是配置同一個 bunldleid 無論卸載與否均可以使用同一個 UUID ,可做如下配置。
第一:添加文件

第二:配置工程

第三:存操作

第四:取操作

deviceToken 推送
- 64位字符串,同一臺設備卸載在安裝值會改變,不被允許時全0;每次安裝都是唯一的
SimulateIDFA
- 盡可能多的讀取設備信息生成唯一標識
應用
數(shù)據(jù)統(tǒng)計、用戶追蹤這些是應用推廣運營工作中所需的參數(shù)指標;與技術開發(fā)工作者而言,解決用戶設備唯一標識無疑是首先面對的問題。iOS 系統(tǒng)原本有一個可用于唯一標記設備的字符串標記,只是當用戶關閉廣告追蹤時,便無法獲取。
- 用戶激活統(tǒng)計:網(wǎng)上很多各種各樣的解決方案;但無疑歸納一下三種方式:
1> 取設備的 IDFA ;
2> 盡可能多的取設備的信息然后附加隨機參數(shù)在自定義生成;
3> 數(shù)據(jù)存儲 Keychain 中。
用戶來源追蹤問題
在應用 A 中推廣應用 B 的下載鏈接,倘若應用 B 想統(tǒng)計通過應用 A 推廣鏈接而來的新用戶;網(wǎng)上有資料說可以考慮 iOS9 后蘋果推出的 SafariServices 或者 iOS10 之后的剪切板共享數(shù)據(jù)。
網(wǎng)上給出的兩種方案大致如下:
1.1 iOS 因為系統(tǒng)封閉無法取得其他應用的信息, iOS9 后蘋果推出的 SafariServices 可以在應用中打開一個 Safari 頁面,這里可以嘗試獲取 Safari 的 cookie 。
1.2 假定未安裝 B 應用的新用戶在應用 A 中點擊了跳轉下載應用 B 的中轉頁;中轉頁可以將必要信息寫入系統(tǒng) cookie 。
1.3 用戶下載 B 應用之后通過 SafariServices 獲取系統(tǒng) cookie(這里說的 cookie 不同與應用內部 UIWebView 或 WKWebView 所開辟的 cookie 存儲區(qū)) 數(shù)據(jù)。
2.1 雖然iOS系統(tǒng)封閉,但可以通過剪切板互通數(shù)據(jù)(iOS 10 一下 JS 無法讀寫剪切板)。
2.2 假定未安裝 B 應用的新用戶在應用 A 中點擊了跳轉下載應用 B 的中轉頁 ;該用戶打開的中轉頁將必要的信息通過 JS 寫入系統(tǒng)剪切板 。
2.3 用戶下載應用 B 之后,使用原生操作剪切板的 API 讀取系統(tǒng)剪切板內容(已嘗試,失?。?。
2.3 用戶下載應用 B 之后,可以嘗試使用應用 B 加載一個 web ,再次借用 JS 讀取系統(tǒng)剪切板(未嘗試)。
- 在應用中使用蘋果在 iOS9 之后推出的 SafariServices 服務的確可以讀取到設備默認瀏覽器的 cookie ;但應用讀取過程中必須展示一個類似 Safari 打開的網(wǎng)頁,當然你可以在其上加一層蒙版。剪切板方案測試中,JS 并未成功操作系統(tǒng)剪切板,所以應用的原生 API 也就讀取不到; 但該方案可以嘗試在原生應用中加載一個 Web 頁來讀取剪切板。