亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > iOS > 正文

iOS獲取設備唯一標識的8種方法

2020-07-26 03:03:47
字體:
來源:轉載
供稿:網友

8種iOS獲取設備唯一標識的方法,希望對大家有用。

UDID

UDID(Unique Device Identifier),iOS 設備的唯一識別碼,是一個40位十六進制序列(越獄的設備通過某些工具可以改變設備的 UDID),移動網絡可以利用 UDID 來識別移動設備。

許多開發者把 UDID 跟用戶的真實姓名、密碼、住址、其它數據關聯起來,網絡窺探者會從多個應用收集這些數據,然后順藤摸瓜得到這個人的許多隱私數據,同時大部分應用確實在頻繁傳輸 UDID 和私人信息。 為了避免集體訴訟,蘋果最終決定在 iOS 5 的時候,將這一慣例廢除。

現在應用試圖獲取 UDID 已被禁止且不允許上架。

MAC 地址

MAC(Medium / Media Access Control)地址,用來表示互聯網上每一個站點的標示符,是一個六個字節(48位)的十六進制序列。前三個字節是由 IEEE 的注冊管理機構 RA 負責給不同廠家分配的”編制上唯一的標示符(Organizationally Unique Identifier)”,后三個字節由各廠家自行指派給生產的適配器接口,稱為擴展標示符。

MAC 地址在網絡上用來區分設備的唯一性,接入網絡的設備都有一個MAC地址,他們肯定都是唯一的。一部 iPhone 上可能有多個 MAC 地址,包括 WIFI 的、SIM 的等,但是 iTouch 和 iPad 上就有一個 WIFI 的,因此只需獲取 WIFI 的 MAC 地址就好了。一般會采取 MD5(MAC 地址 + bundleID)獲取唯一標識。

但是 MAC 地址和 UDID 一樣,存在隱私問題, iOS 7 之后,所有設備請求 MAC 地址會返回一個固定值,這個方法也不攻自破了。

OpenUDID

UDID 被棄用后,廣大開發者需要尋找一個可以替代的 UDID,并且不受蘋果控制的方案,由此,OpenUDID 成為了當時使用最廣泛的開源 UDID 代替方案。OpenUDID 利用一個非常巧妙的方法在不同程序間存儲標示符:在粘貼板中用了一個特殊的名稱來存儲標示符,通過這種方法,其他應用程序也可以獲取。

蘋果在 iOS 7 之后對粘貼板做了限制,導致同一個設備上的應用間,無法再共享一個 OpenUDID。

UUID + 自己存儲

UUID(Universally Unique IDentifier),通用唯一標示符,是一個32位的十六進制序列,使用小橫線來連接:8-4-4-4-12,通過 NSUUID(iOS 6 之后)[NSUUID UUID].UUIDString 或者 CFUUID(iOS 2 之后) CFBridgingRelease(CFUUIDCreateString(kCFAllocatorDefault, CFUUIDCreate(kCFAllocatorDefault))) 來獲取,但是每次獲取的值都不一樣,需要自己存儲。

推送 token + bundleID

推送 token 保證設備唯一,但是必須有網絡情況下才能工作,該方法不依賴于設備本身,但依賴于 apple push,而 apple push 有時候會抽風的。

IDFA

IDFA-identifierForIdentifier(廣告標示符),在同一個設備上的所有 APP 都會取到相同的值,是蘋果專門給各廣告提供商用來追蹤用戶而設定的。雖然 iPhone 默認是允許追蹤的,而且一般用戶都不知道有這么個設置,但是用戶可以在 設置 - 隱私 - 廣告追蹤 里重置此 ID 的值,或者限制此 ID 的使用,所以有可能會取不到值。

IDFV

IDFV-identifierForVendor(Vendor 標示符),通過 [UIDevice currentDevice].identifierForVendor.UUIDString 來獲取。是通過 bundleID 的反轉的前兩部分進行匹配,如果相同是同一個 Vendor ,例如對于 com.mayan.app_1 和 com.mayan.app_2 這兩個 bundleID 來說,就屬于同一個 Vendor ,共享同一個 IDFV,和 IDFA 不同的是,IDFV 的值一定能取到的,所以非常適合于作為內部用戶行為分析的主 ID 來識別用戶。但是用戶刪除了該 APP ,則 IDFV 值會被重置,再次安裝此 APP ,IDFV 的值和之前的不同。

IDFV + keychain

通過以上幾種儲存唯一標識的方法的分析,總結一下各有優劣。很多方法被蘋果禁止或者漏洞太多,越來越不被開發者使用,現在蘋果主推 IDFA 和 IDFV 這兩種方法,分別對外和對內,但是 IDFV 在 APP 重新安裝時會更改,所以我的方法是通過第一次生成的 IDFV 存儲到 keychain 中,以后每次獲取標識符都從 keychain 中獲取。

#import <UIKit/UIKit.h>@interface MYVendorToll : NSObject+ (NSString *)getIDFV;@end
#import "MYVendorToll.h"#import "MYKeyChainTool.h"@implementation MYVendorToll+ (NSString *)getIDFV{ NSString *IDFV = (NSString *)[MYKeyChainTool load:@"IDFV"]; if ([IDFV isEqualToString:@""] || !IDFV) {  IDFV = [UIDevice currentDevice].identifierForVendor.UUIDString;  [MYKeyChainTool save:@"IDFV" data:IDFV]; } return IDFV;}@end
#import <Foundation/Foundation.h>@interface MYKeyChainTool : NSObject+ (void)save:(NSString *)service data:(id)data;+ (id)load:(NSString *)service;+ (void)deleteKeyData:(NSString *)service;@end
#import "MYKeyChainTool.h"@implementation MYKeyChainTool+ (NSMutableDictionary *)getKeychainQuery:(NSString *)service { return [NSMutableDictionary dictionaryWithObjectsAndKeys:   (id)kSecClassGenericPassword,(id)kSecClass,   service, (id)kSecAttrService,   service, (id)kSecAttrAccount,   (id)kSecAttrAccessibleAfterFirstUnlock,(id)kSecAttrAccessible,   nil];}+ (void)save:(NSString *)service data:(id)data { //Get search dictionary NSMutableDictionary *keychainQuery = [self getKeychainQuery:service]; //Delete old item before add new item SecItemDelete((CFDictionaryRef)keychainQuery); //Add new object to search dictionary(Attention:the data format) [keychainQuery setObject:[NSKeyedArchiver archivedDataWithRootObject:data] forKey:(id)kSecValueData]; //Add item to keychain with the search dictionary SecItemAdd((CFDictionaryRef)keychainQuery, NULL);}+ (id)load:(NSString *)service { id ret = nil; NSMutableDictionary *keychainQuery = [self getKeychainQuery: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:(id)kCFBooleanTrue forKey:(id)kSecReturnData]; [keychainQuery setObject:(id)kSecMatchLimitOne forKey:(id)kSecMatchLimit]; CFDataRef keyData = NULL; if (SecItemCopyMatching((CFDictionaryRef)keychainQuery, (CFTypeRef *)&keyData) == noErr) {  @try {   ret = [NSKeyedUnarchiver unarchiveObjectWithData:(__bridge NSData *)keyData];  } @catch (NSException *e) {   NSLog(@"Unarchive of %@ failed: %@", service, e);  } @finally {  } } if (keyData)  CFRelease(keyData); return ret;}+ (void)deleteKeyData:(NSString *)service { NSMutableDictionary *keychainQuery = [self getKeychainQuery:service]; SecItemDelete((CFDictionaryRef)keychainQuery);}@end

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产亚洲欧洲黄色| 亚洲最大福利视频| 久久久久久国产精品三级玉女聊斋| 茄子视频成人在线| 亚洲精品99久久久久中文字幕| 国产一区二区精品丝袜| 国产精品久久久久久久久久尿| 91天堂在线视频| 欧美激情一级二级| 国产一区二区三区三区在线观看| 黄色成人av在线| 久久99国产精品自在自在app| 欧美成人在线免费视频| 亚洲欧洲高清在线| 欧美日韩免费观看中文| 国产精品久久久久久久久免费| 欧美裸体xxxx极品少妇软件| 欧美肥老太性生活视频| 日本精品在线视频| 欧美伦理91i| 91亚洲国产成人精品性色| 亚洲成人三级在线| 欧美日韩国产激情| 欧美麻豆久久久久久中文| 日韩精品在线第一页| 高清一区二区三区四区五区| 日韩美女在线观看| 日韩高清免费观看| 日韩女优人人人人射在线视频| 精品国产一区二区三区久久| 中文字幕成人在线| 中文字幕亚洲欧美日韩高清| 成人久久久久爱| 日韩久久免费视频| 亚洲影院高清在线| 国产成人一区三区| 亚洲国产精品专区久久| 欧美丰满少妇xxxxx做受| 国产不卡精品视男人的天堂| 国产精品7m视频| 国产亚洲日本欧美韩国| 日韩av男人的天堂| 亚洲精品黄网在线观看| 日韩免费观看视频| 最新国产精品亚洲| 2018中文字幕一区二区三区| xxx成人少妇69| 国产精品久久久久久久久久久久久久| 日韩电影网在线| 亚洲精品免费网站| 国产视频久久网| 久久精品成人动漫| 国产精品视频男人的天堂| 中文字幕日韩欧美在线视频| 国产精品综合久久久| 91国产视频在线| 国产精品一区av| 国产精品久久久久久久av大片| 92看片淫黄大片欧美看国产片| xxx一区二区| 亚洲精品美女在线观看播放| 91av在线免费观看| 亚洲视频免费一区| 欧美精品一本久久男人的天堂| 8x拔播拔播x8国产精品| 欧美日韩国产综合新一区| 色综合久综合久久综合久鬼88| 色悠久久久久综合先锋影音下载| 国产精品自拍视频| 国产精品久久久久久久久借妻| 亚洲欧美一区二区激情| 亚洲精品美女在线观看播放| 视频直播国产精品| 欧美激情按摩在线| 国产亚洲欧美aaaa| 欧美成人精品三级在线观看| 欧美日韩在线观看视频小说| 4438全国亚洲精品在线观看视频| 57pao精品| 久久av在线播放| 亚洲精品美女久久久| 欧美在线观看网站| 一本大道久久加勒比香蕉| 国产精品视频色| 中文字幕一精品亚洲无线一区| 久久久视频在线| 68精品国产免费久久久久久婷婷| 久久综合久中文字幕青草| 久久久久久久91| 国产一区二区三区视频在线观看| 欧美性极品少妇精品网站| 国产精品视频一区二区高潮| 91精品国产色综合久久不卡98| 国产精品久久久久久久一区探花| 久久久久北条麻妃免费看| 亚洲欧美成人网| 奇门遁甲1982国语版免费观看高清| 欧洲日本亚洲国产区| 57pao精品| 九九九久久久久久| 91网在线免费观看| 激情久久av一区av二区av三区| 国产精品久久久久av免费| 亚洲美女av在线播放| 亚洲天堂影视av| 久久久久久成人精品| 欧美日韩中文字幕在线视频| 亚洲图片在区色| 国产免费观看久久黄| 亚洲人成电影网| 欧美插天视频在线播放| 国产精品久久久久久婷婷天堂| 亚洲国产天堂久久国产91| 欧美精品电影在线| 日韩av在线导航| 日韩av片免费在线观看| 高清日韩电视剧大全免费播放在线观看| 欧美日韩国产一区在线| 国产成人97精品免费看片| 中文字幕精品在线视频| 黄网站色欧美视频| 亚洲一区二区三区毛片| 亚洲福利在线视频| 青草热久免费精品视频| 欧美午夜激情视频| 欧美中文字幕在线视频| 久久国产精品久久久久久| 91精品久久久久久久久久另类| 亚洲裸体xxxx| 亚洲精品欧美一区二区三区| 国产成人综合久久| 91香蕉嫩草神马影院在线观看| 中文字幕综合一区| 国产亚洲精品久久久优势| 1769国内精品视频在线播放| 成人美女免费网站视频| 中文字幕欧美精品在线| 国产suv精品一区二区三区88区| 日产日韩在线亚洲欧美| 国产精品久久久久久久久久| 亚洲香蕉在线观看| 91高潮在线观看| 中文字幕亚洲激情| 成人做爰www免费看视频网站| 欧美一级在线亚洲天堂| 日韩精品在线免费播放| 亚洲精品一二区| 97免费中文视频在线观看| 亚洲已满18点击进入在线看片| 深夜福利一区二区| 久久久噜噜噜久噜久久| 亚洲偷熟乱区亚洲香蕉av| 91黑丝高跟在线| 日韩高清有码在线| 精品国产一区二区在线| 一区二区国产精品视频| 欧美日韩国产中文精品字幕自在自线| 国产精品免费久久久久久| 亚洲精品国产精品国自产在线| 日韩精品电影网| 亚洲精品一区二区久| 啪一啪鲁一鲁2019在线视频| 精品久久久久久久久久久久久| 亚洲伊人第一页|