1. 程式人生 > >iOS怎樣獲取裝置唯一識別符號

iOS怎樣獲取裝置唯一識別符號

  • Vindor標示符 (IDFV-identifierForVendor) Vendor是CFBundleIdentifier(反轉DNS格式)的前兩部分。來自同一個運營商的應用執行在同一個裝置上,此屬性的值是相同的;不同的運營商應用執行在同一個裝置上值不同。 經測試,只要裝置上有一個tencent的app,重新安裝後的identifierForVendor值不變,如果tencent的app全部刪除,重新安裝後的identifierForVendor值改變。

    分析

    雖然我們看似有了那麼多的唯一標識,但是不要高興的太早,上面所有這些表示裝置唯一號的標識,在IOS7中要麼被禁止使用,要麼重新安裝程式後兩次獲取的識別符號不一樣。 下面就專案中的事來說一下,我的成(辛)長(酸)歷(歷)程(史)。之前的一個專案中要與無線WIFI裝置對接,來控制使用者使用無線網路的情況,但是,硬體那邊來的技術小哥一口咬定要實現這個必須要裝置的Mac地址,因為他們的無線裝置就是根據mac地址來實現控制的,然後對我進行了瘋狂的灌輸,Mac地址的用處...此處省略無數字,但是我想說的是,高傲的蘋果不允許啊,蘋果已經不允許獲取使用者的Mac地址了,在iOS請求的Mac地址都會返回一個固定的值,你不是要用來使用者識別麼,你識別啊,在iOS7後返回一臉的02:00:00:00:00:00。一切的轉機直到我聯絡到了他們的技術總監,一個大一號的程式猿(~_ ~),然後事情就解決了,其實通過別的唯一識別符號也是可以的。 UDID,Mac地址,OpenUDID,都已經要麼無效要麼禁止,那麼我們就採用目前用的比較多的UUID吧。

    UUID使用

    首先我麼要獲取裝置的UUID啊,這個還是比較簡單的,上程式碼

      NSString *deviceUUID = [[[UIDevice currentDevice] identifierForVendor] UUIDString];
    
      NSLog(@"%@",deviceUUID);

    這樣我們就打印出了裝置的UUID

    2016-08-02 15:13:14.138 keychaintest[2002:222100] BDAF6B4D-5DC0-4AEF-BCF8-6C7EFC94DE97

    但是問題來了,當我們從真機上解除安裝這個軟體重新安裝的時候,UUID變了(模擬器每次都變),對,確實變了


    圖片1.jpg


    我們如果還要用UUID來作為唯一識別符的話,我們只能把他存在一個地方,讓軟體解除安裝的時候他也不會丟失,NSUserDefaults和FMDB等本地儲存已經不能再完成他們的使命了。怎麼辦呢?

    keychain的使用

    keychain的使用確實幫我們解決了這個問題,我們可以在第一次生成我們需要的UUID的時候,儲存他,然後就用keychain裡儲存的值來代替他的UUID,這樣解除安裝之後,生成新的UUID,但是keychain裡的資料是不會消失的,這樣就實現了唯一識別碼的目的。
    文件上說iOS的keyChain是一個相對獨立的空間,當程式替換,刪除時並不會刪除keyChain的內容,這個要比Library/Cache好。刷機,恢復出廠應該就沒有了。關於備份,只會備份資料,到那時不會備份裝置的金鑰,換句話說,即使拿到資料,也沒有辦法解密裡面的內容,感覺keyChain像是沙盒的升級版,可以存放一些非私密的資訊,即使破解也不影響其它使用者,隻影響那個破解了的裝置。(比如針對該裝置的一個金鑰)。
    可訪問性一般來說,自己的程式只能訪問自己的keychain,相同bundle的程式通過設定group可以互相共享同組的keychain,從而實現程式間可以共同訪問一些資料。
    說了那麼多我們怎麼使用它呢,蘋果給出了文件,但是我們只是做簡單的資料的儲存,自己寫個簡單的類來實現它就好了。

  • 相關推薦

    iOS怎樣獲取裝置唯一識別符號

    Vindor標示符 (IDFV-identifierForVendor) Vendor是CFBundleIdentifier(反轉DNS格式)的前兩部分。來自同一個運營商的應用執行在同一個裝置上,此屬性的值是相同的;不同的運營商應用執行在同一個裝置上值不同。 經測試,只要裝置上有一個tencent的app,

    iOS 獲取裝置唯一識別碼 IDFV+keychain

    最近專案中需要獲取到裝置的唯一標誌傳送給後臺儲存備用,在UDID UUID IDFA等都存在諸多問題(什麼問題可以自己查閱資料)的情況下,選擇了 IDFV+keychain(當然特殊情況下也存在些許問題,但基本無影響,非常夠用)。 identifierForVendor是a

    iOS獲取裝置唯一的UUID(解決刪除應用UUID變更的問題)

    這是蘋果開發者中心官方提供的,放心下載。 把這兩個檔案拖入工程,然後按下圖進行設定(①新增security.framework框架②KeychainItemWrapper.m檔案用的是MRC,需要新增-fno-objc-arc) 然後在APPDelegate中引入標頭檔

    android獲取裝置唯一識別符號

    1、獲取IMEI: adb命令:adb shell dumpsys iphonesubinfo 手機裝置檢視:<1>*#06#(通話快捷查詢)<2>設定--->關於手機--->狀態訊息--->IMEI <3>直

    iOS獲取裝置唯一標識的八種方法

    UDID UDID(Unique Device Identifier),iOS 裝置的唯一識別碼,是一個40位十六進位制序列(越獄的裝置通過某些工具可以改變裝置的 UDID),行動網路可以利用 UDID 來識別移動裝置。 許多開發者把 UDID 跟使用者的真

    iOS--獲取裝置唯一標示UUID

    由於蘋果對安全的加強,現在通過 NSString *identifier = [[[UIDevice currentDevice] identifierForVendor] UUIDString]

    通過Safari瀏覽器獲取iOS裝置UDID(裝置唯一識別符號)

    通過Safari與mobileconfig獲取iOS裝置UDID(裝置唯一識別符號) 科普:U D I D (Unique Device Identifier),唯一標示符,是iOS裝置的一個唯一識別碼,每臺iOS裝置都有一個獨一無二的編碼,UDID其實也是在裝

    iOS獲取裝置唯一標識的方法總結

    轉自:https://www.jianshu.com/p/686958c352f1     各種獲取裝置唯一標識的方法介紹 一.UDID(Unique Device Identifier) UDID的全稱是Unique Device Identifier,它就是蘋

    iOS獲取裝置唯一標識的方法總結以及最好的方法

    各種獲取裝置唯一標識的方法介紹 一.UDID(Unique Device Identifier) UDID的全稱是Unique Device Identifier,它就是蘋果iOS裝置的唯一識別碼,它由40位16進位制數的字母和數字組成(越獄的裝置通過某

    iOS開發之獲取裝置唯一標識的各種方法?IDFA、IDFV、UDID分別是什麼含義?

    一、UDID (Unique Device Identifier) UDID的全稱是Unique Device Identifier,顧名思義,它就是蘋果IOS裝置的唯一識別碼,它由40個字元的字母和數字組成。在很多需要限制一臺裝置一個賬號的應用中經常會用到。

    [iOS]獲取裝置具體型號資訊

    本文地址; http://blog.csdn.net/zhaoyabei/article/details/46697859 應用統計中有時候需要上傳裝置型號,如果這樣寫: [[UIDevice currentDevice] model] 獲得的裝置型號不是具體型號,如在iPho

    android獲取裝置唯一標識

    IMEI 百度百科解釋:IMEI(International Mobile Equipment Identity)是國際移動裝置身份碼的縮寫,國際移動裝備辨識碼,是由15位數字組成的“電子串號”,它與每臺行動電話機一一對應,而且該碼是全世界唯一的。每一隻行動電話機在組裝完成後都將被賦予一個全

    Android獲取裝置唯一標識解決方案

    關於Android裝置唯一識別符號號 前言 由於在開發中需要開發遊客模式,在使用者沒有登入的情況下必須確保裝置的唯一性,於是慣性思維想到的肯定是使用DevicesId 來作為裝置的唯一標識,用以代替使用者登入以後的唯一識別符號。 但是由於國內複雜的rom定製情況,以及使

    iOS 獲取裝置資訊,mac地址,IP地址,裝置名稱

    #import "DeviceInfoUtil.h" #import "GlobleData.h" #import "sys/utsname.h" #import <AdSupport/AdSupport.h> #import <ifaddrs.h>

    安卓獲取渠道名渠道id Android獲取裝置唯一標識的終極解決方法,防止安卓7.0時崩潰問題

    一,先說獲取渠道名(這裡以友盟為例) /* * 4.5.1新加渠道名欄位,用來傳給後臺去統計各個渠道下載量 * */ public static String getSource() { //獲取渠道名 Strin

    Android獲取裝置唯一標識碼

    話不多說,先貼程式碼 /**獲取裝置唯一標識碼
 * @param context 上下文
 * @return 裝置唯一標識碼
 */
 public static String getUDID

    獲取裝置唯一ID的幾種方式

    部落格摘要:很簡單,就是獲取裝置的唯一ID,直接上正文。 先來看看幾種比較單一的方式:  IMEI 方式:TelephonyManager.getDeviceId(): 問題 範圍:只能支援擁有通話功能的裝置,對於平板不可以。 永續性:返廠,資料擦除的時候不徹

    android獲取裝置唯一標識完美解決方案

    這是Android系統為開發者提供的用於標識手機裝置的串號,也是各種方法中普適性較高的,可以說幾乎所有的裝置都可以返回這個串號,並且唯一性良好。 這個DEVICE_ID可以同通過下面的方法獲取: TelephonyManager tm = (TelephonyManager)getSystemServi

    Android獲取裝置唯一ID

    Android的開發者在一些特定情況下都需要知道手機中的唯一裝置ID。例如,跟蹤應用程式的安裝,生成用於複製保護的DRM時需要使用裝置的唯一ID。在本文件結尾處提供了作為參考的示例程式碼片段。 範圍 本文提供有關如何讀取各種Android裝置的 ID的介紹,用以使用標

    Android裝置唯一識別符號ID

    一、獲取各種單一的裝置標識方式 1、DEVICE_ID 概念:是區別移動裝置的標誌,儲存在移動裝置中,可用於監控被竊或無效的移動裝置。 優點:根據不同的手機裝置返回IMEI,MEID或者ESN碼,唯一性良好 缺點:由於獲取