2016-09-20 2 views
-1

Мне интересно, как я могу определить пользователь с каким-то альтернативным способом:Идентификация устройства без идентификатора устройства и Nugat

  • Я не хочу использовать идентификатор устройства, поскольку оно требует разрешений и спрашивать пользователь, его губит мое приложение

  • Я не могу использовать MAC адрес, потому что от Nugat его не допускается

  • Другие вещи аутентификации не являются уникальными

Мне нужен уникальный идентификатор устройства, который я могу использовать без разрешения назначать пользователя в базе данных на его устройство.

+0

Генерировать UUID на устройстве, и сохранить его во внутренней памяти (например, 'getFilesDir()'), чтобы однозначно идентифицировать конкретную установку приложения. – CommonsWare

ответ

1

Рекомендуемый метод - создать уникальный идентификатор для вашего приложения и сохранить его в локальных данных приложения. Это позволяет вашему приложению запоминать, является ли оно одним и тем же устройством, пока оно установлено, но не через установки.

например,

SharedPrefs prefs = ...; 
String id = prefs.getString("my.id"); 
if (TextUtils.isEmpty(id)) { 
    prefs.edit.putString("my.id", UUID.randomUUID()).apply(); 
} 

Обратите внимание, что невозможность получения идентификатора упорную устройства является особенностью. Вы не должны отслеживать таких пользователей. Если пользователь отключает ваше приложение, вы должны «забыть» о них полностью.

0

Идентификатор устройства и MAC-адрес являются уникальными идентификаторами, используемыми повсюду. Но naugat не разрешает доступ к MAC-адресу.

Вы можете использовать идентификатор регистрации мобильного телефона. Это уникальный идентификатор google-сервера для нас. Этот идентификатор используется для идентификации уведомлений на основе GCM. Я внедрил уведомления на основе GCM, поэтому он пришел к идее использовать этот идентификатор как уникальный идентификатор.

Вы можете искать оповещения на основе GCM в Android. Вы найдете способ создания этого Reg. Я бы. Для этого потребуется библиотека gcm и разрешения на доступ в Интернет.

Для захвата удалений Reg Идентификаторы очень длинные 4096 байт, так не предпочитали быть накоп лен в дб, как уникальный идентификатор. Solutioon может быть, Когда вы получаете ошибку NotRegistered или приложение удаляется, вы действительно должны удалить этот идентификатор регистрации из своей БД (или по крайней мере отметить его статусом, который говорит, что он неактивен, и прекратить отправлять ему сообщения). Но если приложение будет переустановлено на устройстве, с которого оно было ранее удалено, приложение может получить тот же идентификатор регистрации, когда он снова зарегистрируется в GCM, поэтому ваш сервер должен разрешить регистрационные идентификаторы, которые в какой-то момент дали NotRegistered для активации еще раз.

Вы должны обновить старый регистрационный идентификатор, когда вы получите идентификационный номер канонической регистрации в ответ от Google.

1

Это то, к чему относится InstanceID, он генерирует уникальный идентификатор, который затем можно использовать для связывания данных. Причина, по которой это лучший подход, чем UUID, заключается в том, что в любое время, когда вам нужно получить токен, вы в большинстве случаев получите тот же самый, и если он изменится, вы будете уведомлены о том, что в то время вы обновили бы свой сервер с новым идентификатором ,

UUID всегда даст вам что-то новое

https://developers.google.com/instance-id/

+0

Или посмотрите мое сообщение, если вы не хотите включать мегабайты в Google, и задаетесь вопросом, почему Google создал вспомогательный класс для такой простой концепции. –

+0

@JeffreyBlattman InstanceID намного больше, чем просто помощник и гораздо полезнее использовать, чем UUID. Вы не можете запросить UUID и получить информацию о том, активен ли пользователь или даже если ключ по-прежнему действителен. – tyczj

+0

Как ключ был бы недействительным? Все случаи, перечисленные в документах для 'InstanceID', обрабатываются в решении, которое я опубликовал. –

0

Я надеюсь, что это не требует какого-либо разрешения

import android.provider.Settings.Secure; 

private String androidId = Secure.getString(getContext().getContentResolver(), 
                Secure.ANDROID_ID); 
Смежные вопросы