2013-02-02 29 views
3

iOS6的新IDFA features適用於運行iOS6的用戶的轉換跟蹤。但是,如果應用程序的最低支持版本低於iOS 6,那麼在iOS6以前版本的設備上運行時應該如何處理?在iOS6之前的應用程序中使用UDID(IDFA爲6.0+以上)

Jumptap mentions您仍然可以使用UDID的預iOS6的設備:

的廣告標識符(IDFA)的iOS版6中引入它由廣告商使用,以便追蹤轉換和先進的定位,中其他事情。在使用iOS 6(或更高版本)的設備上,IDFA旨在將UDID替換爲設備標識符。在使用iOS 5(或更低版本)的設備上,Apple將繼續支持使用UDID作爲設備標識符。

雖然這對我來說並不好。 iOS版本檢查是一個運行時間的事情,這意味着您的代碼將始終靜態鏈接到廢棄的UDID訪問器,並且僅在運行時決定是否讀取它。蘋果的審查過程肯定會看到UDID的靜態鏈接並拒絕該應用程序。他們不打算反編譯代碼並確認你的邏輯是正確的,或者嘗試進行100%的代碼覆蓋測試以確認它在iOS6中運行時從不讀取,是嗎?!?!

此外,AppsFlyer mention that UDID's can be enabled in their SDK,這一注:

* UDID細節:有些廣告網絡(例如豐富媒體)需要UDID運行CPI活動。在上述情況下,您需要啓用UDID並更新您的應用條款&具有明確隱私聲明的條件通知您的用戶收集他們的私人信息。

這似乎暗示UDID仍然允許被閱讀,只要你通知用戶。但是我在蘋果官方文檔中找不到任何提及。

回答

2

他們很可能不是,但他們應該。但看,蘋果的目標不是取悅開發者;他們的目標是取悅自己(即賺大錢)。

如果你擔心這個事件最終會發生在你身上(這是一個非常合理的恐懼),那麼你可以嘗試混淆對該特定消息的調用(並且僅在iOS 5和更高版本中調用它才能違反服務條款)。例如:

NSString *str1 = @"ueId"; 
NSString *str2 = @"uniq"; 
NSString *sel = [NSString stringWithFormat:@"%@%@ent%cfi%s", str2, str1, 'i', "er"]; 
SEL msg = NSSelectorFromString(sel); 
if (iOS_5_or_older) { 
    deviceID = [[UIDevice currentDevice] performSelector:msg]; 
} 

這是相當薄弱的「混淆」,但可能足以通過故事的靜態分析部分得到,如果蘋果真的偷懶和/或決定做B * DGER你。

+0

哈哈,真的嗎?基本上試圖偷偷通過審查員,以抵制他/她(錯誤地?)在UDID訪問區域拒絕我的應用程序的機會?我寧願寫一些來自Apple的文檔記錄這個UDID亂七八糟,然後對審查過程完全透明,並解釋我在使用UDID時的情況,當我使用它時(僅限iOs5)以及爲什麼... – Tyson

+0

@Tyson任何合理的人都會喜歡,但蘋果是懶惰和邪惡的。 :-(太糟糕了,儘管如此,你可以嘗試提交你的應用程序而不用任何欺騙,看看它是否被拒絕。 – 2013-02-02 06:27:31

1

UDID現在無法驗證。轉到OpenUDID。

相關問題