在開發過程中,我們經常會被要求獲取每個裝置的唯一標示,以便後台做相應的處理。我們來看看有哪些方法來獲取裝置的唯一標示,然後再分析下這些方法的利弊。
具體可以分為如下幾種:
1、uuid
2、idfa
3、idfv
4、mac
5、uuid
下面我們來具體分析下每種獲取方法的利弊
什麼是udid
udid 「unique device identifier description」是由子母和數字組成的40個字串的序號,用來區別每乙個唯一的ios裝置,包括 iphones, ipads, 以及 ipod touches,這些編碼看起來是隨機的,實際上是跟硬體裝置特點相聯絡的。
udid是用來幹什麼的?
udid可以關聯其它各種資料到相關裝置上。例如,連線到開發者賬號,可以允許在發布前讓裝置安裝或測試應用;也可以讓開發者獲得ios
為什麼蘋果反對開發人員使用udid?
ios 2.0版本以後uidevice提供乙個獲取裝置唯一識別符號的方法uniqueidentifier,通過該方法我們可以獲取裝置的序列號,這個也是目前為止唯一可以確認唯一的標示符。 許多開發者把udid跟使用者的真實姓名、密碼、住址、其它資料關聯起來;網路窺探者會從多個應用收集這些資料,然後順藤摸瓜得到這個人的許多隱私資料。同時大部分應用確實在頻繁傳輸udid和私人資訊。 為了避免集體訴訟,蘋果最終決定在ios 5 的時候,將這一慣例廢除,開發者被引導生成乙個唯一的識別符號,只能檢測應用程式,其他的資訊不提供。現在應用試圖獲取udid已被禁止且不允許上架。
所以這個方法作廢。
全名:advertisingidentifier
獲取**:
#import
nsstring *adid = [[[asidentifiermanager sharedmanager] advertisingidentifier] uuidstring];
注意:由於idfa會出現取不到的情況,故絕不可以作為業務分析的主id,來識別使用者。
全名:identifierforvendor
獲取**:
nsstring *idfv =[[[uidevice currentdevice] identifierforvendor] uuidstring];
使用wifi的mac位址來取代已經廢棄了的uniqueidentifier方法。具體可見:
然而在ios 7中蘋果再一次無情的**mac位址,使用之前的方法獲取到的mac位址全部都變成了02:00:00:00:00:00。
我們可以獲取到uuid,然後把uuid儲存到keychain裡面。
使用keychain,將uuid當做密碼資訊來儲存.
大致流程:
通過adsupport獲取uuid(原因adsupport可以跨應用)
nsstring *ifa = nil;
class asidentifiermanagerclass = nsclassfromstring(@"asidentifiermanager");
if (asidentifiermanagerclass)
return ifa;}
如果不支援adsupport,那就使用ifv/idfv (identifier for vendor)
if(nsclassfromstring(@"uidevice") && [uidevice
instancesrespondtoselector:
@selector(identifierforvendor)])
return
nil;}
如果以上的都不支援,使用cfuuidref手動建立uuid
+ (nsstring *)randomuuid
cfuuidref uuidref = cfuuidcreate(kcfallocatordefault);
cfstringref cfuuid = cfuuidcreatestring(kcfallocatordefault, uuidref);
cfrelease(uuidref);
nsstring *uuid = [((__bridge nsstring *) cfuuid) copy];
cfrelease(cfuuid);
return uuid;
}
最後,新增到keychain
+ (void)setvalue:(nsstring *)value forkey:(nsstring *)key inservice:(nsstring *)service
如果更新了provisioning profile的話, keychain data會丟失.所以我們應該將uuid在nsuserdefault備份.
[[nsuserdefaults standarduserdefaults]
setobject:@」123456-1234-1234-12345678」 forkey:@"deviceuid"];
[[nsuserdefaults standarduserdefaults]
synchronize];
IOS獲取裝置唯一標識
wwdc 2013已經閉幕,ios7 beta隨即發布,介面之難看無以言表.簡直就是山寨android。更讓ios程式猿悲催的是,裝置唯一標識的mac address在ios7中也失效了。ios系統中,獲取裝置唯一標識的方法有很多 一.udid unique device identifier ud...
獲取iOS裝置唯一標識
1.已禁用 uidevice uniqueidentifier 3.mac位址不能再用來設別裝置 還有乙個生成ios裝置唯一標示符的方法是使用ios裝置的media access control mac 位址。乙個mac位址是乙個唯一的號碼,它是物理網路層級方面分配給網路介面卡的。這個位址蘋果還有其...
iOS獲取裝置唯一標識
目前市面應用普遍採用使用者體驗,涉及到部分重要功能時候才提醒使用者註冊賬戶,而使用者之前的操作,比如收藏,點讚,關注等內容需要同時關聯進註冊的賬戶,那麼根據什麼記錄使用者的操作資訊就尤為重要。下面就列出我之前收集資料總結的方案。udid unique device identifier ios 裝置...