IOS 裝置ID解決方案

2021-06-22 03:16:41 字數 1765 閱讀 9903

大多數應用都會用到蘋果裝置的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...