【ios遊戲開發】之UDID和OpenUDID掃盲

Apple公司於2013年5月1日開始,拒絕採集UDID的App上架App Store。 爲適應Apple公司的這一政策,2013年4月23日之後,友盟統計分析iOS平臺的SDK只提供OpenUDID版本。 OpenUDID版本SDK使用OpenUDID爲統計標準,兼有mac地址的統計。同時,我們已經上線服務器端解決方案,避免大家在將SDK從UDID版本切換到OpenUDID版本時統計數據受到影響。

提到了UDID和OpenUDID,那麼這兩個有什麼區別呢?

最近iOS7開始禁掉了UDID,不允許APP隨便獲取玩家的UDID信息,防止用作非法用途,如廣告商廣告分析,黑客盜用信用卡.
UDID與OpenUDID的不同之處

  • 每臺iOS設備的UDID是唯一且永遠不會改變;
  • 每臺iOS設備的OpenUDID是通過第一個帶有OpenUDID SDK包的App生成,如果你完全刪除全部帶有OpenUDID SDK包的App(比如恢復系統等),那麼OpenUDID會重新生成,而且和之前的值會不同,相當於新設備;
是否足夠替代
  • 普通的iOS設備用戶不會沒事就去恢復系統或者抹掉系統,所以一般OpenUDID的值是不會改變的;
  • 在iOS系統升級換代時,會產生較大的影響,畢竟95%以上的iOS設備用戶都會選擇升級到最新的系統;
是否足夠替代就看你對UDID的需求是什麼了,如果要求怎麼都不能變,那OpenUDID可能還是不能滿足你的需求!


如下是一位網友的

關於OpenUDID的測試分析(含Demo)

原文地址:http://blog.csdn.net/wwmusic/article/details/8929611

早前研究OpenUDID,最近整理資料,故貼出關於OpenUDID測試分析結果


1、OpenUDID測試結果

1)同一臺設備下(黑色iPhone4)

a、  Demo1OfOpenUDID測試結果

線局域網下:

137891ec369c899b01cc3df6cad90360514827e7

GPRS下:

137891ec369c899b01cc3df6cad90360514827e7

飛行模式下:

137891ec369c899b01cc3df6cad90360514827e7

b、安裝第二個Demo2OfOpenUDID測試結果【Demo1存在未刪除】

線局域網下:

137891ec369c899b01cc3df6cad90360514827e7

GPRS下:

137891ec369c899b01cc3df6cad90360514827e7

飛行模式下:

137891ec369c899b01cc3df6cad90360514827e7

c、Demo1存在,刪除Demo2應用並重裝後:

137891ec369c899b01cc3df6cad90360514827e7

d、 將使用了LXF_OpenUDID方案的應用全部刪除【關機重啓iPhone,Xcode徹底清除並重啓】重裝Demo2

da0fd9abf16b6c8dade7e5228a6761b8adfc958b


2)不同設備

a、 黑色iPhone4:

3be23eac6a6fc0721c184a0acfd5d54af4431bb7

b、 白色iphone4

b6d314050e29bf9dd12574320bec8f03354d8547

c、 黑色iPhone4S

965e60bd2a95e3c350066f56a44420d40822df96

(以已有的三部設備分別交替重複測試)


2OpenUDID測試結果分析

1)優點:

a、沒有用到MAC地址。MAC地址跟UDID一樣,存在隱私問題。不能保證以後不會禁用MAC地址。

b、不同設備能夠獲取各自唯一的識別碼,保證了唯一性,可以用於以往UDID的相關用途。

c、從代碼分析OpenUDID的獲取,識別碼獲取方便並且保存謹慎

OpenUDID生成唯一識別碼的代碼:

[objc] view plaincopy
  1. unsigned char result[16];  
  2.         const charchar *cStr = [[[NSProcessInfo processInfo] globallyUniqueString] UTF8String];  
  3.         CC_MD5( cStr, strlen(cStr), result );  
  4.         _openUDID = [NSString stringWithFormat:  
  5.                      @"%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%08x",  
  6.                      result[0], result[1], result[2], result[3],   
  7.                      result[4], result[5], result[6], result[7],  
  8.                      result[8], result[9], result[10], result[11],  
  9.                      result[12], result[13], result[14], result[15],  
  10.                      arc4random() % 4294967295];   

當設備裝上第一個使用OpenUDID方案的應用程序第一次調試時,會生成一個唯一識別碼,追加8爲隨機數保持了40位的UDID,並且利用了NSUserDefaults類將識別碼進行了保存。

     但是當應用刪除,UserDefaults同樣會被清空,爲了避免重新生成唯一識別碼,該方案還使用到了UIPasteboard類(設備剪切板),將識別碼同時保存到了UIPasteboard中。


[objc] view plaincopy
  1. UIPasteboard* slotPB = [UIPasteboard pasteboardWithName:availableSlotPBid create:YES];  
  2.         [LXF_OpenUDID _setDict:localDict forPasteboard:slotPB];  

d、當設備上安裝第二個使用了OpenUDID方案的應用程序,將會從UIPasteboard中獲取唯一識別碼,這裏取到的就是之前第一個應用保存到UIPasteboard中的。【前提:設備上有一個使用了OpenUDID的應用存在】


2)缺點

a、當將設備上所有使用了OpenUDID方案的應用程序刪除,且設備關機重啓,xcode徹底清除並重啓,重裝應用程序去獲取OpenUDID,此時OpenUDID變化,與之前不一樣了,從測試結果可看出。

b、由缺點1分析,所有OpenUDID應用卸載後,由UIPasteboard保存的數據即被清除,重裝故會重新獲取新的OpenUDID。

那麼當因爲用戶干預或者惡意程序,致使UIPasteboard數據清除,從而導致OpenUDID被刪除,重裝也會獲取新的OpenUDID。


想細究的同學可以參考網址:http://blog.csdn.net/wwmusic/article/details/8929611

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章