Назначение уникального идентификатора каждый раз, когда приложение Android открыто
Я создаю приложение, основной целью которого является сбор данных для экспериментов, которые оно загружает в базу данных в конце каждого эксперимента. Я хочу назначать уникальный идентификатор при каждом запуске эксперимента (либо открытие приложения, либо перезапуск эксперимента).
Я не могу использовать идентификатор, который является уникальным только для устройства, поскольку на каждом устройстве будет выполнено несколько экспериментов.
Я не могу использовать идентификатор, основанный на времени эксперимента (или какой-либо другой форме последовательного назначения), поскольку несколько устройств могут одновременно отправлять свои данные.
На данный момент мое решение состоит в том, чтобы назначать случайное число при каждом запуске эксперимента, которое проверяется по базе данных и пересчитывается, если оно существует. Это не идеально, поскольку возможно, но редко, что два эксперимента будут проводиться одновременно и будут назначены (случайно) одному и тому же идентификатору.
Как назначить уникальный идентификатор при каждом запуске эксперимента?
3 ответа
То, что вы делаете, уже правильно.
При этом, если вы действительно не хотите проверять базу данных каждый раз, когда делаете вставку, вы всегда можете объединить уникальный MAC-адрес Wi-Fi устройства с уникальной отметкой времени. Не используйте номер IMEI (например, планшеты, использующие только Wi-Fi, не имеют номера IMEI, и технически номера IMEI также могут конфликтовать из-за небрежных производителей).
Являются ли MAC-адреса Wi-Fi уникальными? Это также не гарантируется, но если вы объедините его с меткой времени, это увеличит вероятность отсутствия столкновения.
И если вы хотите еще больше повысить свои шансы, вы всегда можете объединить MAC-адрес Wi-Fi вместе с отметкой времени и UUID. Опять же, эта стратегия также не гарантирует уникальность, но, на мой взгляд, она довольно близка.
Вы можете использовать UUID. Из документа:
UUID is an immutable representation of a 128-bit universally unique identifier
Практически нулевой шанс, что 2 эксперимента будут проводиться одновременно с точностью до миллисекунд, не говоря уже о наносекундах, которые вы можете получить из системы. Так что вы можете легко положиться на их уникальность. Если вас это не устраивает, объедините идентификатор устройства со временем в наносекундах до эксперимента, что снизит вероятность его столкновения. Если вы хотите сойти с ума. Создайте сервер, который будет иметь хэш-карту всех сгенерированных им чисел и будет создавать новый для каждого экземпляра экспериментального приложения. Я дам вам алгоритм, чтобы сделать его эффективным, если хотите.
Вы также можете использовать GUID https://www.guidgenerator.com/ который в основном эквивалентен случайному выбору числа от 0 до 2^128-1, что является МНОГО.