DeviceCheck框架是iOS 11後提供的一個記錄用戶設備的工具框架。app
在實際應用中,常常會遇到須要識別用戶設備的需求,例如某些免費試用的應用程序,會根據設備判斷用戶是否已經試用過。Apple基於保護用戶隱私的原則,開發者不能直接獲取用戶設備的相關標識信息,iOS 11後,Apple提供了DeviceCheck框架用來提供設備檢查功能。框架
DeviceCheck很是簡單,大部分設備檢查的邏輯要交給服務端調用Apple提供的接口來實現。工具
DeviceCheck框架中只提供了一個類:DCDevice。其中定義以下:spa
@interface DCDevice : NSObject // 類屬性 獲取實例對象 @property (class, readonly) DCDevice *currentDevice; // 檢查框架是否可用 @property (getter=isSupported, readonly) BOOL supported; // 請求Token - (void)generateTokenWithCompletionHandler:(void(^)(NSData * _Nullable token, NSError * _Nullable error))completion; @end
DeviceCheck框架的核心在於獲取設備的Token數據,拿到Token數據後能夠仿照服務端發送推送的相關流程進行用戶設備檢查信息的讀或寫。詳細文檔地址以下:code
https://developer.apple.com/documentation/devicecheck/accessing_and_modifying_per-device_data對象
使用token進行設備檢查時須要發送Query請求,參數以下:blog
在Apple返回的數據中會包含兩個二進制的位和一個時間戳:token
能夠發現,其實Apple提供給開發者標記用戶設備的能力十分有限,滿打滿算,開發者只能對用戶設備標記4種狀態。經過兩個布爾位,用來獲取當前設備是否參加了活動或者是否已經使用過試用資格等等。開發者也能夠對這兩個布爾值進行修改,上傳請求的參數以下:接口