iOS7或以後將不能使用MAC位址生成

2021-06-26 11:51:30 字數 2805 閱讀 3838

翻譯:從ios7及更高版本往後,如果你向ios裝置請求獲取mac位址,系統將返回乙個固定值「02:00:00:00:00:00」,如果你需要識別裝置的 唯一性,請使用uidevice的identifierforvendor屬性。(因廣告目的而需要識別裝置的應用,請考慮使用 asidentifiermanager的advertisingidentifier屬性作為替代)

這個mac位址是指什麼?有什麼用?

mac(medium/media access control)位址,用來表示網際網路上每乙個站點的識別符號,採用十六進製制數表示,共六個位元組(48位)。其中,前三個位元組是由ieee的註冊管理機構 ra負責給不同廠家分配的**(高位24位),也稱為「編制上唯一的識別符號」 (organizationally unique identifier),後三個位元組(低位24位)由各廠家自行指派給生產的介面卡介面,稱為擴充套件識別符號(唯一性)。

mac位址在網路上用來區分裝置的唯一性,接入網路的裝置都有乙個mac位址,他們肯定都是不同的,是唯一的。一部iphone上可能有多個mac位址,包括wifi的、sim的等,但是itouch和ipad上就有乙個wifi的,因此只需獲取wifi的mac位址就好了,也就是en0的位址。

1、直接使用「mac address」 

2、使用「md5(mac address)」

3、使用「md5(mac address+bundle_id)」獲得「機器+應用」的唯一標識(bundle_id 是應用的唯一標識)

在ios系統中,獲取裝置唯一標識的方法有很多:

一.udid(unique device identifier)

二.uuid(universally unique identifier) 

三.mac address

四.open udid

五.廣告標示符(idfa-identifierforidentifier)

六.vindor標示符 (idfv-identifierforvendor)

七.推送token+bundle_id

udid的全稱是unique device identifier,它就是蘋果ios裝置的唯一識別碼,它由40個字元的字母和數字組成(越獄的裝置通過某些工具可以改變裝置的udid)。流動網路可利用udid來識別移動裝置,但是,從ios5.0(2023年8月份)開始,蘋果宣布將不再支援用uniqueidentifier方法獲取裝置的udid,ios5以下是可以用的。在2023年3月21日蘋果已經通知開發者:從2023年5月1日起,訪問uidids的程式將不再被審核通過,替代的方案是開發者應該使用「在ios 6中介紹的vendor或advertising標示符」。所以udid是絕對不能用啦。

open udid,沒有用到mac位址,同時能保證同一臺裝置上的不同應用使用同乙個openudid,只要使用者裝置上有乙個使用了openudid的應用存在時,其他後續安裝的應用如果獲取openudid,都將會獲得第乙個應用生成的那個。但是根據貢獻者的**和方法,和一些開發者的經驗,如果把使用了openudid方案的應用全部都刪除,再重新獲取openudid,此時的openudid就跟以前的不一樣。可見,這種方法還是不保險。

廣告標示符,是ios 6中另外乙個新的方法,提供了乙個方法advertisingidentifier,通過呼叫該方法會返回乙個nsuuid例項,最後可以獲得乙個uuid,由系統儲存著的。不過即使這是由系統儲存的,但是有幾種情況下,會重新生成廣告標示符。如果使用者完全重置系統((設定程式 -> 通用 -> 還原 -> 還原位置與隱私) ,這個廣告標示符會重新生成。另外如果使用者明確的還原廣告(設定程式-> 通用 -> 關於本機 -> 廣告 -> 還原廣告標示符) ,那麼廣告標示符也會重新生成。關於廣告標示符的還原,有一點需要注意:如果程式在後台執行,此時使用者「還原廣告標示符」,然後再回到程式中,此時獲取廣 告標示符並不會立即獲得還原後的標示符。必須要終止程式,然後再重新啟動程式,才能獲得還原後的廣告標示符。

vindor標示符,也是在ios 6中新增的,跟advertisingidentifier一樣,該方法返回的是乙個 nsuuid物件,可以獲得乙個uuid。如果滿足條件「相同的乙個程式裡面-相同的vindor-相同的裝置」,那麼獲取到的這個屬性值就不會變。如果是「相同的程式-相同的裝置-不同的vindor,或者是相同的程式-不同的裝置-無論是否相同的vindor」這樣的情況,那麼這個值是不會相同的。

推送token+bundle_id的方法:

1、應用中增加推送用來獲取token 

2、獲取應用bundle_id 

3、根據token+bundle_id進行雜湊運算 

uuid是universally unique identifier的縮寫,中文意思是通用唯一識別碼。它是讓分布式系統中的所有元素,都能有唯一的辨識資訊,而不需要透過**控制端來做辨識資訊的指定。這樣,每個人都可以建立不與其它人衝突的 uuid。在此情況下,就不需考慮資料庫建立時的名稱重複問題。蘋果公司建議使用uuid為應用生成唯一標識字串。

ios中獲取uuid的**如下: 

-(nsstring*) uuid  

開發者可以在應用第一次啟動時呼叫一 次,然後將該串儲存起來,以便以後替代udid來使用。但是,如果使用者刪除該應用再次安裝時,又會生成新的字串,所以不能保證唯一識別該裝置。這就需要各路高手想出各種解決方案。所以,之前很多應用就採用mac address。但是現在如果使用者公升級到ios7(及其以後的蘋果系統)後,他們機子的mac address就是一樣的,沒辦法做區分,只能棄用此方法,重新使用uuid來標識。如果使用uuid,就要考慮應用被刪除後再重新安裝時的處理。

乙個解決的辦法是:uuid一般只生成一次,儲存在ios系統裡面,如果應用刪除了,重灌應用之後它的uuid還是一樣的,除非系統重置 。但是不能保證在以後的系統公升級後還能用(如果系統儲存了該資訊就能用)。

from: 

關於iOS7以後版本企業發布問題

大家都知道,蘋果在發布7.1以後,不打個招呼就把企業發布方式給換掉了 譴責一下 以前普通伺服器 web頁面 ipa plist就可以搞定,現在已經不行了。這裡重點說一下會遇到的問題以及解決方法。1 由於我們現在需要的是https加密型別的web頁面,所以我們需要購買證書。這裡要注意的是自己頒發的證書...

iOS7以後解決view上移的問題

你當然可以在 xcode 中修改每個 view,將他們下移20個畫素 狀態列高度 或者64個畫素 狀態列 導航欄高度 但是蘋果顯然已經考慮到這個問題,他們在 ios 7 sdk 中為 viewcontroller 提供了乙個 edgesforextendedlayout 新屬性。如果你將這個屬性設定...

iOS7適配問題

ios 7發布了,適配問題來了,開發者都忙起來了。先記乙個ios7 的幾個特點 1.座標 以螢幕左上角為原點 ios7以前在狀態列或者導航條下 2.uiscrollview 包括其子類,比如uitableview 會自動在頂部和底部預留一些空白 因為滾動經過半透明導航條或者tabbar下面,需要能隱...