2010-12-08 37 views
2

我正在一個客戶端iPhone應用程序,它允許用戶評價各種服務。沒有註冊或登錄。限制對iPhone應用程序投票到一個特定的iPhone設備

要求是用戶不能重複評定服務(雖然可以改變他們的評價)。目前,該應用程序可能會被刪除,重新安裝,用戶可以再次投票。

我們考慮過使用設備ID,但是一位同事提到蘋果公司建議不要這樣做。如果我的理解正確,以防萬一電話被退回到商店,重新發布,然後新用戶下載了相同的應用程序。對我來說,這似乎是一個很好的案例,但我猜想可能發生在企業內部。

是否有一種智能的方式來限制對特定設備的投票?也許使用鑰匙串?

任何指針非常讚賞。

回答

1

重要的是要注意UDID和UUID之間的區別。

UDID「唯一設備ID」是硬件特定的。它永遠不會改變一個特定的設備。出於這個原因,它已成爲一個隱私問題,蘋果正在阻止試圖使用它的應用程序。因此,Apple已經生成了一個選擇退出的「設備ID」哈希,特別是對於廣告使用。這個新的ID散列稱爲IFA,可在iOS 6.0或更高版本中使用。

UUID「通用唯一ID」不是硬件特定的。它是用來識別設備的散列。但不是絕對的價值。例如,PhoneGap根據設備屬性生成一個UUID;這是您在執行device.uuid時所得到的結果。如果你刪除了應用程序並重新安裝,你會得到一個新的ID散列。 UUID沒有被Apple阻止。

我認爲您的案例中最好的解決方案是使用IFA,OpenUDID作爲iOS < 6.0的備份。

這是我們使用的代碼。如果IFA不可用,請獲取OpenUDID。你必須安裝OpenUDID,在這裏閱讀更多關於https://github.com/ylechelle/OpenUDID

NSString* uuid = nil; 
if ([[UIDevice currentDevice] respondsToSelector:@selector(identifierForVendor)]) { 
    // IOS 6 new Unique Identifier implementation, IFA 
    uuid = [[[UIDevice currentDevice] identifierForVendor] UUIDString]; 
} else { 
    // Before iOS6 (or if IFA disabled) you shoud use a custom implementation for uuid 
    // Here I use OpenUDID (you have to import it into your project) 
    // https://github.com/ylechelle/OpenUDID 
    NSString* openUDID = [OpenUDID value]; 
    uuid = [OpenUDID value]; 
} 
+0

我有類似的需求。如果一個被黑客攻擊的應用程序每次發送一個生成的UUID而不是原始的UUID,會發生什麼?有從安裝的原始應用程序確定UUID的方法嗎? – 2013-05-29 17:15:51