大多數應用都會用到蘋果裝置的udid號,udid通常有以下兩種用途:
1)用於一些統計與分析目的;【第三方統計工具如友盟,廣告商如admob等】
2)將udid作為使用者id來唯一識別使用者,省去使用者名稱,密碼等註冊過程。
不過,2023年時,蘋果就宣布ios5.0以後的系統中將不再支援以下方法獲取使用者的udid【蘋果裝置的唯一識別碼】:
[uidevice currentdevice] uniqueidentifier];
【注:對於已越獄了的裝置,udid並不是唯一的.使用cydia外掛程式udidfaker,可以為每乙個應用分配不同的udid】
同時,蘋果公司建議使用uuid【一種開放的軟體構建標準】來替代:
-(nsstring*) uuid
該方法每次都會獲取乙個唯一的標識字串,開發者可以在應用第一次啟動時候呼叫一次,然後將該串儲存起來,以便以後替代udid來使用。
問題是如果使用者刪除該應用再次安裝時,又會生成新的字串,所以不能保證唯一識別該裝置。
而最近(2023年3月),有訊息稱蘋果應用商店開始拒絕使用udid的應用上架。
現在網上有一現成的解決方案,使用裝置的mac位址,因為mac位址也是唯一的.unix有系統呼叫可以獲取mac位址.但有些事情需要注意:
1.iphone可能有多個mac位址,wifi的位址,以及sim卡的位址.一般來講,我們取en0的位址,因為他是iphone的wifi的位址,是肯定存在的.
2.mac位址涉及到隱私,不應該胡亂將使用者的mac位址傳播!所以我們需要將mac位址進行hash之後,才能作為deviceid上傳.
該方案提供了兩個方法:
uniquedeviceidentifier (返回mac和cfbundleidentifier的md5值)
uniqueglobaldeviceidentifier(返回mac的md5值)
使用方法:
#import "uidevice+identifieraddition.h"nslog(@"%@",[[uidevice currentdevice] uniquedeviceidentifier]);
nslog(@"%@",[[uidevice currentdevice] uniqueglobaldeviceidentifier]);
測試結果:
wifi下:
udid:***x21f1f19edff198e2a2356bf4***x
新生成的:***x7dc3c577446a2bcbd77935bd***x
3g下:
udid:***x21f1f19edff198e2a2356bf4***x
新生成的:***x7dc3c577446a2bcbd77935bd***x
gprs下
udid:***x21f1f19edff198e2a2356bf4***x
新生成的:***x7dc3c577446a2bcbd77935bd***x
飛行模式下:
udid:***x21f1f19edff198e2a2356bf4***x
新生成的:***x7dc3c577446a2bcbd77935bd***x
刪除應用重灌後:
udid:***x21f1f19edff198e2a2356bf4***x
新生成的:***x7dc3c577446a2bcbd77935bd***x
補充:還有兩個比較通用的開源解決方案:
openudid:
secureudid:
**:
分布式ID解決方案
在分布式系統中,當資料庫資料量達到一定量級的時候,需要進行資料拆分 分庫分表操作,傳統使用方式的資料庫自有的自增特性產生的主鍵id已不能滿足拆分的需求,它只能保證在單個表中唯一,所以需要乙個在分布式環境下都能使用的全域性唯一id。uuid uuid是指在一台機器上生成的數字,主要由當前日期和時間 時...
ios橫豎屏解決方案
ios生成pdf,並且以郵件的方式傳送出去 利用itouch看pdf word powerpoint文件 ios橫豎屏的效果是不相同的,其效果也是不一樣的。所以我們在開發中如果允許螢幕橫豎屏間的切換,那麼我們就要調整檢視的布局。利用inte ce builder開發,我們可以快速的拖拽出合適的介面布...
iOS鍵盤遮擋解決方案
ios中鍵盤遮擋問題很常見,網上有很多解決方案,現在要說的這種也是其中一種。很多的解決方案很侷限,沒考慮適配等問題。首先監聽以下兩個通知,系統會負責傳送通知,當然你自己也可以傳送。監聽鍵盤的即將顯示事件.uikeyboardwillshownotification nsnotificationcen...