【Swift 開發】IDFA儲存到鑰匙串中保證永久不變,除非系統重灌
一、 IDFA值會發生改變的情況
在何種情況下 , 應用的IDFA值會發生改變?
在iOS的設定應用中選擇“重置所有設定”
*沒有影響
在iOS的設定應用中“清除所有的內容和設定”
*advertisingIdentifier 和 identifierForVendor 都會受到影響重新設定變為新值
通過iTunes還原裝置
*advertisingIdentifier 和 identifierForVendor 都會受到影響重新設定變為新值
從裝置上刪除該APP
*如果該APP是某個開發者賬號下在該裝置上的最後一個APP時,會影響identifierForVendor 的值,否則不會影響該欄位的值。
升級應用
*無影響
啟用或關閉“限制廣告追蹤”
*應影響advertisingIdentifier 欄位的具體值
系統升級(通過手機自己升級或通過iTunes升級)
*會改變identifierForVendor 欄位的值
在iOS的設定應用中“重新設定廣告標示符”
*會改變advertisingIdentifier 的值。如果一些應用正在請求該欄位,那麼在該應用重新啟動前該欄位的值並不會發生改變。
通過iTunes進行備份
*對這兩個欄位沒有影響
通過iTunes對備份進行還原
*兩個欄位都會被重置
二、如何保證IDFA不變
將IDFA存到系統的鑰匙串裡面
// 系統鑰匙串管理工具類
import UIKit
class BCSKeyChainTool: NSObject {
/// 查詢
static func getKeychainQuery(service: String) -> NSMutableDictionary {
return NSMutableDictionary.init(objects: [kSecClassGenericPassword, service, service, kSecAttrAccessibleAfterFirstUnlock], forKeys: [kSecClass as! NSCopying, kSecAttrService as! NSCopying, kSecAttrAccount as! NSCopying, kSecAttrAccessible as! NSCopying])
}
/// 儲存
static func save(service: String, data: Any) {
// Get search dictionary
let keychainQuery = self.getKeychainQuery(service: service)
// Delete old item before add new item
SecItemDelete(keychainQuery)
// Add new object to search dictionary(Attention:the data format)
keychainQuery.setObject(NSKeyedArchiver.archivedData(withRootObject: data), forKey: kSecValueData as! NSCopying)
// Add item to keychain with the search dictionary
SecItemAdd(keychainQuery, nil)
}
/// 載入
static func load(service: String) -> String {
var ret: String = ""
let keychainQuery = self.getKeychainQuery(service: service)
// Configure the search setting
// Since in our simple case we are expecting only a single attribute to be returned (the password) we can set the attribute kSecReturnData to kCFBooleanTrue
keychainQuery.setObject(kCFBooleanTrue, forKey: kSecReturnData as! NSCopying)
keychainQuery.setObject(kSecMatchLimitOne, forKey: kSecMatchLimit as! NSCopying)
var keyData: CFTypeRef?
if SecItemCopyMatching(keychainQuery, &keyData) == noErr {
ret = NSKeyedUnarchiver.unarchiveObject(with: keyData as! Data) as! String
}
return ret
}
/// 刪除
static func deleteKeyData(service: String) {
let keychainQuery = self.getKeychainQuery(service: service)
SecItemDelete(keychainQuery)
}
}
其實和 OC 的SAMKeychain的作用是一樣的
相關文章
- WDRC 證書一定要在系統鑰匙串
- iOS 鑰匙串的基本使用iOS
- 鑰匙串密碼忘記了怎麼辦?如何在Mac上重置鑰匙串密碼密碼Mac
- 少年黑客發現MacOS鑰匙串中的嚴重BUG黑客Mac
- 無鑰匙進入及啟動系統
- 【汽車科普】數字鑰匙及UWB鑰匙
- Mac一直彈輸入密碼視窗或提示儲存鑰匙串解決方法Mac密碼
- Adobe2022更新,ps總是提示需要訪問鑰匙串祕鑰怎麼解決?
- “萬能鑰匙”漏洞使AI變得邪惡AI
- 萬能wifi鑰匙WiFi
- 全快閃記憶體交鑰匙系統:ObjectScale XF960記憶體Object
- LDAP:開啟潘多拉寶盒的鑰匙LDA
- 電腦開不開機了怎麼用u盤重灌系統_電腦開不了機u盤重灌系統步驟
- 英特爾科普重灌系統:遇事不決,重啟電腦,再不行重灌系統
- Adobe2022版上線,ps2022總是提示需要訪問鑰匙串祕鑰怎麼解決?
- 電腦系統不會重灌的情況下win10怎麼重灌系統Win10
- 後IDFA時代,開發者該如何保障變現收益?
- Adobe2022破解版上線,ps2022總是提示需要訪問鑰匙串祕鑰怎麼解決?
- RSA公開金鑰系統
- office 2010 金鑰 office 2010永久的金鑰
- 重灌系統會把所有的東西刪掉嗎 儲存所有檔案重灌系統方法教程
- 重灌系統
- 域滲透的金之鑰匙
- ccf 公共鑰匙盒 java實現Java
- leetcode-841-鑰匙和房間LeetCode
- iPhone可以充當汽車鑰匙嗎?(蘋果企業開發者賬戶)iPhone蘋果
- win10系統下怎麼將鎖屏桌布儲存到本地Win10
- 重灌系統會把所有的東西刪掉嗎 不影響系統檔案重灌方法介紹
- 電腦重灌win10系統bios不會設定?用這種方法可以輕鬆重灌系統Win10iOS
- 短視訊app開發,長按將視訊儲存到相簿APP
- 獲取所有鑰匙的最短路徑
- 解決資料孤島的鑰匙
- 重灌系統win7 win7系統怎麼重灌 win7系統重灌教程Win7
- windows系統重灌Windows
- 明日之後傭兵的鑰匙怎麼獲得 明日之後傭兵的鑰匙獲取方法
- 不習慣使用win11系統怎麼重灌win10系統Win10
- 不會重灌電腦系統?看這裡,教您一鍵重灌win10!Win10
- android短視訊開發,設定APP字型大小不隨著系統變化而改變AndroidAPP