在開發中會遇到應用需要記錄裝置標示,即使應用解除安裝後再安裝也可重新識別的情況,在這寫一種實現方式——讀取裝置的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中...