Наименее инвазивный способ однозначно идентифицировать пользователя Android
Как вы можете однозначно идентифицировать пользователя, который установил ваше приложение, чтобы:
- Вы узнаете, что это они, если они удаляют и переустанавливают ваше приложение;
- Вы узнаете, что это они, если они устанавливают ваше приложение на втором устройстве, которое они намерены использовать одновременно?
Как пример, я вижу, что приложение Netflix автоматически свяжется с вашей учетной записью на рабочем столе без какого-либо взаимодействия с пользователем. Я предполагаю, что они используют accountManager.getAccounts()
или аналогичный метод, потому что они также требуют разрешения GET_ACCOUNTS
. Но, конечно, это разрешение отмечено как Protection level: dangerous
. Есть ли какой-либо метод для этого, который менее инвазивен или потенциально опасен?
Ключ к ответу на это должен быть простым (для пользователя) и минимально инвазивным. Android предлагает множество способов идентифицировать пользователей, и многие из этих способов связаны с проникновением конфиденциальности пользователей, и если это единственный способ, я буду делать то, что я делаю сейчас (дополнительная регистрация по электронной почте). Я просто хочу, чтобы мое приложение узнало, зарегистрирован ли пользователь в моей системе через установки без необходимости опроса пользователя (имя пользователя/пароль, адрес электронной почты, сторонний OAuth и т.д.).
Мои основные причины:
- Мне не нужны запросы поддержки от пользователей, которые потеряли свой контент после переустановки; и
- Я не хочу размещать много потерянного контента.
Ответы
Ответ 1
Посмотрите Firebase Authentication. Он довольно бесшовный и не требует больших усилий для включения. Также он не чувствует себя навязчивым или громоздким для конечного пользователя.
Ниже приведено видеоурок от Google.
EDIT:
Если у ваших пользователей есть сотовый телефон с номером телефона, вы можете использовать AccountKit. Это также то, что они называют OTA (одноразовая аутентификация). AccountKit использует только номер телефона пользователя для проверки и проверки пользователей.
EDIT:
Firebase Authentication теперь имеет функцию "Проверка телефона", которая аналогична AccountKit, упомянутой выше. Оба являются хорошими услугами. Тем не менее, проверка телефона Firebase позволяет создавать собственный пользовательский интерфейс с нуля (что означает намного лучший контроль, чем AccountKit). Кроме того, если вы не хотите создавать свой пользовательский интерфейс, вы всегда можете использовать FirebaseUI
Ответ 2
Я реализовал то, что кажется мало похожим на вашу вещь путем push-уведомления, я могу получить ошибку, если пользователь удалил мое приложение (и из регистрационного идентификатора я получил пользователя), и если он будет установлен, он получит новый идентификатор регистрации, и попытайтесь получить UUID пользователя для разных устройств.
Ответ 3
Я думаю, что самый простой способ - использовать UUID и хранить хэш на sharedPreferences. Вы должны сгенерировать UUID как можно раньше в своем приложении.
sharedPrefs = context.getSharedPreferences(APP_SHARED_PREFS,Activity.MODE_PRIVATE);
if (sharedPrefs.getString("YOUR-KEY-TO-THE-UUID") == null || "".equals(sharedPrefs.getString("YOUR-KEY-TO-THE-UUID"))){
prefsEditor = sharedPrefs.edit();
prefsEditor.putString("YOUR-KEY-TO-THE-UUID", UUID.randomUUID().toString());
prefsEditor.commit();
}
Ответ 4
Я думаю, что лучший способ - внедрить логин с Google или Facebook. Это совершенно безопасно для пользователей, достаточно безопасных (поскольку Google и Facebook считаются доверенными), вам не нужно внедрять вашу регистрацию по электронной почте, и у вас будет идентификация между устройствами.
Ответ 5
Если ваше приложение только для Android, и вы хотите предоставить личность без создания учетной записи для пользователя, я считаю, что использование имени/идентификатора учетной записи Google является лучшим выбором (Доступ к Google Идентификатор учетной записи/имя пользователя через Android), так как вы должны использовать учетную запись Google на телефоне Android (если вы не установили ее, не удалите Службы Google Play и т.д.).
Если вы хотите только обратиться к первой точке своего вопроса (идентифицировать после переустановки), то идентификатор устройства - Secure.getString(getContext().getContentResolver(), Secure.ANDROID_ID);
, хотя он не на 100% надежный (fe Factory Reset сбрасывает это значение)
Ответ 6
Стандартом для достижения такого рода функциональности является использование JSON web tokens (JWT) в сочетании со стандартным аварийным трафиком api.
Предполагая, что ваше приложение для Android работает с RESTful api для всех кропотливых операций и бизнес-логики, использование JWT в качестве идентификатора аутентификации для вашего api может работать довольно хорошо. Вы можете вставлять информацию в каждый JWT, чтобы вы могли идентифицировать все, что вам нравится (идентификатор пользователя в базе данных, идентификатор устройства, в котором зарегистрирован пользователь и т.д.). JWT - это, по существу, структура данных, позволяющая хранить информацию, которая будет использоваться API.
Некоторые основы для того, как это работает:
- Получение JWT в приложении. Пользователь регистрируется в приложении, используя свое имя пользователя/пароль.
api затем возвращает зашифрованный JWT, который будет использоваться клиентом для всех будущих запросов. Не пытайтесь делать
шифрование самостоятельно. Любой язык, который может обрабатывать обслуживание api
будут иметь библиотеки для этого.
-
Использование информации в JWT: JWT сам по себе является структурой данных. Например, это может выглядеть так:
{
user_id: 1,
device_id: 44215,
device_os: android,
}
Ваш api расшифровывает JWT, когда он предоставляется для
аутентификацию через заголовок запроса, а затем эту информацию можно получить в
контекст сессии.
Если вы предоставляете язык, используемый вашим api, я могу рекомендовать библиотеку.
В заключение я обращусь к окончательному требованию, которое вы представили, в котором говорится, что вы не хотите брать интервью у пользователя через установки. Если я понимаю ваш смысл, вы хотите, чтобы пользователь мог просто установить приложение и начать использовать его без предоставления учетных данных для проверки подлинности, тогда нет надежного безопасного решения. Возможно, вы сможете придумать хакерский способ заставить его работать, но это будет фундаментально неуверенно.