Как сохранить данные между установками приложений на Android?

Я думал, что будет какое-то прямое решение для этого.

Требования:

  • Уникальная идентификация устройства во время сеансов установки/удаления приложения.

Параметры:

  1. Используйте какой-либо Android-идентификатор устройства-API каждый раз, когда это необходимо (читайте его каждый раз из Android API). Согласно сообщению в блоге Identififying-app-installations, это не рекомендуемое и не надежное решение.

  2. Сгенерируйте UUID один раз (при первом запуске приложения) и каким-то образом сохраните его, чтобы он сохранялся при нескольких установках/удалениях приложения. Эта часть «где-то как-то» является загадкой. Такие решения, как хранение на SD-карте или в облаке, не подходят. В iOS есть цепочка для ключей, которую можно использовать для подобных вещей, но я не нашел ее эквивалента в Android.

Какие у меня есть другие варианты здесь? Я предпочитаю идти по маршруту (2) из-за реализации моего сервера (сервер генерирует UUID в первый раз, если его нет). Но если это не вариант, я могу вернуться к (1) и изменить сервер.

Спасибо.


person vale4674    schedule 04.12.2015    source источник
comment
В iOS есть цепочка для ключей, которую можно использовать для подобных вещей, но я не нашел ее эквивалента в Android — все, что вы поместите в хранилище ключей, будет удалено при удалении вашего приложения. Это где-то каким-то образом является тайной. Такие решения, как хранение на SD-карте или в облаке, не подходят — нет другого места, кроме внешнего хранилища, куда вы можете поместить файлы, которые сохранятся после удаления, и пользователь может избавиться от файлов из внешнего хранилища, если он того пожелает. .   -  person CommonsWare    schedule 04.12.2015
comment
Просто отметим, что iOS сохраняет свои данные в цепочке для ключей, даже если приложение удалено, а затем установлено. Интересно, стоит ли мне идти (1) дорогой с Android.   -  person vale4674    schedule 04.12.2015
comment
Вы можете использовать идентификатор устройства Android для создания сеанса. Идентификатор устройства уникален для каждого телефона и не изменится. Таким образом, вы можете сохранить сеанс, пока пользователь не изменит свое устройство.   -  person Jelle van Es    schedule 04.12.2015


Ответы (1)


Чтобы однозначно идентифицировать приложение между установками/переустановками приложения, вам нужно получить его hardware ID и использовать его в качестве учетных данных/ключа.

Чтобы получить hardwareID, вы можете использовать следующий метод:

public static String getHardwareId(Context context) {
    return Settings.Secure.getString(context.getContentResolver(), Settings.Secure.ANDROID_ID);
}

он частично эквивалентен UUID со следующим исключением: значение может измениться, если на устройстве будет выполнен сброс настроек к заводским.

Причина, по которой я называю его «частично эквивалентным», заключается в следующем: HardwareID — это 64-битное число (в виде шестнадцатеричной строки), которое генерируется случайным образом, когда пользователь впервые настраивает устройство, и должно оставаться постоянным в течение всего срока службы пользовательского устройства. . Значение может измениться, если на устройстве выполнен сброс до заводских настроек. Примечание. Если у устройства несколько пользователей (доступно на некоторых устройствах под управлением Android 4.2 или более поздней версии), каждый пользователь отображается как совершенно отдельное устройство, поэтому значение ANDROID_ID является уникальным для каждого пользователя.

Но это затрагивает проблему № 2: где и как это хранить; хранить его в SharedPreferences бесполезно, поскольку он стирается, если приложение удаляется. То же самое для папки /data/data/your.package.name/my_stored_keys, так как она также удаляется с телефона во время удаления.

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

person Shark    schedule 04.12.2015