Почему "использование getString() для получения идентификаторов устройства" не рекомендуется?

Я пытаюсь получить идентификатор своего устройства в Logcat, но Android Studio выдает мне это предупреждение.

использование gettring для получения идентификаторов устройства не рекомендуется

String deviceID = Settings.Secure.getString(getApplicationContext().getContentResolver(),
        Settings.Secure.ANDROID_ID);

Почему это не рекомендуется?

Ответ 1

Полное предупреждение гласит:

Использование этих идентификаторов устройств не рекомендуется, за исключением случаев предотвращения мошенничества с высокими ценностями и сложных случаев использования телефонии. Для рекламных сценариев используйте AdvertisingIdClient $ Info # getId, а для аналитики - InstanceId # getId.

Дополнительная информация: https://developer.android.com/training/articles/user-data-ids.html

Я думаю, что Android не рекомендует использовать это значение, поскольку это постоянный уникальный идентификатор, который можно использовать для отслеживания вашего пользователя, и он или она не может изменить этот идентификатор или помешать вам его прочитать. Другие параметры, указанные в предупреждении, соответствуют вашим пожеланиям. Вот почему Android рекомендует вам использовать это.

Это действительно зависит от того, что вы собираетесь делать с этим идентификатором. В наши дни конфиденциальность очень важна.

Также проверьте это:

... вы должны соблюдать настройку "Отказ от рекламы на основе интересов" или "Отказ от персонализации рекламы". Если пользователь включил этот параметр, вы не можете использовать рекламный идентификатор для создания профилей пользователей в рекламных целях или для таргетинга пользователей с помощью персонализированной рекламы. Разрешенные действия включают контекстную рекламу, ограничение частоты показов, отслеживание конверсий, создание отчетов и обеспечение безопасности и обнаружение мошенничества.

Источник: https://developer.android.com/training/articles/user-data-ids.html

Ответ 2

Как говорит Джованни, измените свой код на:

String deviceID = Settings.Secure.getString(getApplicationContext().getContentResolver(),
        InstanceID.getInstance(getApplicationContext()).getId());

или

String deviceID = Settings.Secure.getString(getApplicationContext().getContentResolver(),
     AdvertisingIdClient.getAdvertisingIdInfo(getApplicationContext()).getId());

如果 在 中国 大陆 发布 此 приложение, 请勿 使用 以上 方法, 可能 导致 NullPointException, 因为 大部分 设备 都 没有 谷 歌 Сервис, 无法 获取 此 id. 请 使用

android.provider.Settings.Secure.ANDROID_ID

然后 加上 lint 屏蔽

@SuppressLint("HardwareIds")

На английском языке: если ваше приложение будет выпущено в Китае, вышеупомянутый метод может привести к NullPointException.Because большинство устройств в Китае не имеет службы Google. Попробуйте следующим образом:

android.provider.Settings.Secure.ANDROID_ID

и добавьте suppressLint:

@SuppressLint("HardwareIds")