Чем идентифицировать пользователя?

Посмотреть в Telegram: @AndroidSobes/296
Речь здесь идет только об идентификации – присвоении юзеру уникального ID, не об аутентификации. Это бывает необходимо для хранения связанных с пользователем данных. Полностью тема раскрыта в соответствующем разделе документации. Есть разные типы идентификации:

1. «Железные» идентификаторы: SSAID, IMEI, MAC-адрес, серийный номер, и другие. Только некоторые из них могут меняться, доступ к некоторым ограничен. Возможность смены пользователем идентификатора нужна из соображений приватности. Их рекомендуется по возможности не использовать.

2. Для рекламных целей используется Advertising ID. Для его получения используется класс AdvertisingIdClient. Помимо ID, он также сообщит, ограничено ли для пользователя отслеживание рекламы. Этот идентификатор нельзя использовать для хранения персональных данных.

3. Instance ID идентифицирует экземпляр приложения. Он изменяется не только при смене девайса, но и при переустановке приложения. Управляется классом FirebaseInstallations. Рекомендуется использовать для не рекламных случаев именно этот идентификатор (либо же генерировать их хранить собственный GUID).

4. Для некоторых специфических нужд идентификацию дает соответствующее API. Например SafetyNet API идентифицирует спамеров и других мошенников; Subscription ID API предоставляет идентификатор для управления подписками.

Конкретную реализацию идентификатора выбирают исходя из его характеристик:

• Границы действия (приложение/набор приложений/девайс);
• Время жизни и сбрасываемость
• Вероятность коллизий
• Сложность подделать