簡體   English   中英

每次打開android應用時分配一個唯一的ID

[英]Assigning a unique ID every time android app is opened

我正在創建一個應用程序,其主要目的是收集實驗數據,並在每次實驗結束時將其上傳到數據庫。 我想每次運行實驗(打開應用程序或重新啟動實驗)時分配一個唯一的標識符。

我不能使用僅設備唯一的標識符,因為在每個設備上都會進行多次實驗。

我無法根據實驗時間(或其他某種形式的順序分配)使用標識符,因為有可能多個設備同時提交其數據。

目前,我的解決方案是每次運行實驗時分配一個隨機數,該數將根據數據庫進行檢查並重新計算是否存在。 這不是完美的,因為有可能,但很少有,兩個實驗將同時運行並被分配(偶然)相同的標識符。

每次運行實驗時如何分配唯一的標識符?

您可以使用UUID 從文檔:

UUID is an immutable representation of a 128-bit universally unique identifier

幾乎同時發生2個實驗(最多幾毫秒)的可能性為零,更不用說可以從系統中獲得的納秒了。 因此,您可以輕松地依靠它們的獨特性。 如果這樣讓您感到不舒服,請將設備ID與以納秒為單位的時間連接起來進行實驗,這將使其碰撞的可能性更低。 如果要絕對瘋了。 建立一台服務器,該服務器將具有其已生成的所有數字的哈希圖,並將為每個實驗應用實例重新生成一個新的哈希圖。 如果您願意,我可以給您提供一種算法,使其高效。

您還可以使用GUID https://www.guidgenerator.com/ ,這基本上等同於隨機選擇一個0到2 ^ 128-1之間的數字。

你在做什么已經是正確的

話雖這么說,如果您真的不想每次插入時都檢查數據庫,則始終可以將設備的唯一MAC wifi地址連接到唯一的時間戳記。 請勿使用IMEI號碼(例如,僅限WiFi的平板電腦沒有IMEI號碼,並且由於制造商的疏忽,技術上IMEI號碼也可能發生沖突)。

MAC wifi地址是否唯一? 也不保證 ,但是如果將其連接到時間戳記,則會增加不發生沖突的機會。

而且,如果您想進一步提高機會,可以隨時將wifi MAC地址,時間戳和UUID連接起來。 同樣,該策略也不能保證唯一性,但是在我看來,它非常接近。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM