獲取iOS裝置唯一標識

2021-08-02 13:01:30 字數 2599 閱讀 7269

在開發過程中,我們經常會被要求獲取每個裝置的唯一標示,以便後台做相應的處理。我們來看看有哪些方法來獲取裝置的唯一標示,然後再分析下這些方法的利弊。 

具體可以分為如下幾種: 

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 裝置...