iOS 獲取裝置唯一標示符的方法詳解

2022-09-24 13:39:16 字數 2128 閱讀 5571

在開發中會遇到應用需要記錄裝置標示,即使應用解除安裝後再安裝也可重新識別的情況,在這寫一種實現方式——讀取裝置的uuid(universally unique identifier)並通過keychain記錄。

首先ios中獲取裝置唯一標示符的方法一直隨版本的更新而變化。ios 2.0版本以後uidevice提供乙個獲取裝置唯一識別符號的方法uniqueidentifier,通過該方法我們可以獲取裝置的序列號,這個也是目前為止唯一可以確認唯一的標示符。好eqrrpiz景不長,因為該唯一識別符號與手機一一對應,蘋果覺得可能會洩露使用者隱私,所以在 ios 5.0之後該方法就被廢棄掉了;ios 6.0系統新增了兩個用於替換uniqueidentifier的介面,分別是:identifierforvendor,advertisingidentifier,但這兩個介面會在應用重新安裝時改變量值,並不是唯一的標示符,所以開發者改為使用wifi的mac位址來取代;ios 7中蘋果又**mac位址,所以開發者再次改變思路使用keychain來儲存獲取到的udid,這樣以後即使app刪了再裝回來,也可以從keychain中讀取回來。

首先儲存裝置的uuid,可以使用類方法+ (id)uuid 是乙個類方法,呼叫該方法可以獲得乙個uuid。通過下面的**可以獲得乙個uuid字串:

nsstring *uuid = [[nsuuid uuid] uuidstring];

也可以儲存在ios 6中新增的vindor標示符 (idfv-identifierforvendor),獲取這個idfv的新方法被新增在已有的uidevice類中。跟advertisingidentifier一樣,該方法返回的是乙個nsuuid物件。

nsstring *idfv = [[[uidevice currentdevice] identifierforvendor] uuidstring];

如果使用者解除安裝了同乙個vendor對應的所有程式,然後在重新安裝同乙個vendor提供的程式,此時identifierforvendor會被重置,所以這裡要用到keychain來儲存。

keychain(鑰匙串)是使用蘋果裝置經常使用的,通常要除錯的話,都得安裝證書之類的,這些證書就是儲存在keychain中,還有我們平時瀏覽網頁記錄的賬號密碼也都是記錄在keychain中。ios中的keychain相比os x比較簡單,整個系統只有乙個keychain,每個程式都可以往keychain中記錄資料,而且只能讀取到自己程式記錄在keychain中的資料。ios中security.framework框架提供了四個主要的方法來操作keychain:

這四個方法引數比較複雜,一旦傳錯就會導致操作keychain失敗,文件中介紹的比較詳細,大家可以查查官方文件。而蘋果提供的keychain使用起來略麻煩,所以這裡推薦乙個第三方庫samkeychains.samkeychains對蘋果安全框架api進行了簡單封裝,支援對儲存在鑰匙串中密碼、賬戶進行訪問,包括讀取、刪除和設定。samkeychains使用簡單,通過例項**便可掌握。

//儲存乙個uuid字串到鑰匙串:

cfuuidref uuid = cfuuidcreate(null);

assert(uuid != null);

cfstringref uuidstr = cfuuidcreatestring(null, uuid);

[samkeychain setpassword: [nsstring stringwithformat:@"%@", uuidstr]

forservice:@"com.yourapp.yourcompany"account:@"user"];

//從鑰匙串讀取uuid:

nsstring *retrieveuuid = [samkeychain passwordforservice:@"com.yourapp.yourcompany"account:@"user"];

**注意: setpassword和passwordforsevice方法中的**serviceeqrrpizs 和 accounts 引數應該是一致的。

更多詳細用法說明可以看samkeychains documentation

基本的實現思路便是這樣,下面是具體的一種具體實現**,僅供參考。

+ (nsstring *)getdeviceid

return currentdeviceuuidstr;

}本文標題: ios 獲取裝置唯一標示符的方法詳解

本文位址:

ios裝置唯一標示符

替代的方案是開發者應該使用 在ios 6中介紹的vendor或advertising標示符 蘋果已經警告過我們uniqueidentifier將不能再使用了,並且提供了另外兩個可選的。但是在程式中該選擇使用哪個呢?本文不會回答這個問題,具體用哪個是由你來根據程式的目的來做決定的。下面我將列出ios中...

ios裝置唯一標示符

原文 替代的方案是開發者應該使用 在ios 6中介紹的vendor或advertising標示符 蘋果已經警告過我們uniqueidentifier將不能再使用了,並且提供了另外兩個可選的。但是在程式中該選擇使用哪個呢?本文不會回答這個問題,具體用哪個是由你來根據程式的目的來做決定的。下面我將列出i...

ios 裝置唯一標示符

替代的方案是開發者應該使用 在ios 6中介紹的vendor或advertising標示符 蘋果已經警告過我們uniqueidentifier將不能再使用了,並且提供了另外兩個可選的。但是在程式中該選擇使用哪個呢?本文不會回答這個問題,具體用哪個是由你來根據程式的目的來做決定的。下面我將列出ios中...