Expo - ошибка доступа к Keystore после переустановки приложения на Android 8.1.0

2

Когда мы удаляем и переустанавливаем наше автономное приложение, получаем следующее исключение в журналах, когда мы снова пытаемся получить доступ к Keystore Android через Expo.SecureStore:

10-12 15:56:37.716  1793  1887 I ReactNativeJS: { [Error: Could not decrypt the item in SecureStore]
10-12 15:56:37.716  1793  1887 I ReactNativeJS:   framesToPop: 1,
10-12 15:56:37.716  1793  1887 I ReactNativeJS:   code: 'E_SECURESTORE_DECRYPT_ERROR',
10-12 15:56:37.716  1793  1887 I ReactNativeJS:   line: 148,
10-12 15:56:37.716  1793  1887 I ReactNativeJS:   column: 1889,
10-12 15:56:37.716  1793  1887 I ReactNativeJS:   sourceURL: '/data/user/0/com.trinet.mobilev7/files/30.0.0/cached-bundle-experience-%40trinet%2Fmobilev7-737969915-30.0.0' }

В текущем обходном пути вы должны войти в Настройки устройства> Приложения и уведомления> Просмотреть все приложения> Наше приложение> Очистить данные. Однако мы требуем, чтобы наш UUID устройства был кэширован в Keystore (использовали для идентификации устройств в нашем бэкэнд для нашей службы Push Notification), чтобы он не сохранялся между повторной установкой. Это отлично работает в других версиях Android (а также iOS), кроме 8.1.0.

Следующие устройства дают ошибки:

  • Nexus 5X
  • Samsung S9
  • Xiaomi

Есть ли какие-либо исправления, которые можно сделать с помощью Expo SDK, чтобы исправить это, или нам придется подождать до следующей версии Expo для исправления?

  • 0
    Если вы удаляете / переустанавливаете приложение, это очищает все данные приложения. Не ясно, что вы говорите, поскольку вы также перечислите очистку данных как проблему и обходной путь.
  • 0
    @JeffreyBlatman обновил первое предложение с отсутствующей информацией. Проблема в том, что, когда приложение пытается получить доступ к хранилищу ключей Android, появляется исключение выше. Насколько я помню, деинсталляция никогда не удаляла данные из хранилища ключей / брелка для Android / iOS. Пока установлено новое приложение с соответствующим идентификатором пакета, оно будет иметь доступ к данным хранилища ключей из предыдущей установки.
Теги:
react-native
expo
android-keystore

2 ответа

0

Попробуйте удалить остаточные данные на вашем мобильном устройстве. Возможно, вы запустили что-то, запустив свое приложение, и оно не очищается во время удаления.

Очистить не только кеш, но и остаточные данные.

Надеюсь это поможет. :)

0

Я посмотрел на источник AOSP. AFAICT код для удаления записей хранилища ключей, связанных с приложением, когда это приложение было удалено, существует с ~ 2013 года (это происходит, когда Android начал предоставлять службу хранилища ключей). См. Метод removeKeystoreDataIfNeeded() в PackageManagerService.

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

мы требуем, чтобы наш UUID устройства был кэширован в Keystore

Android постоянно совершенствует, чтобы приложения не делали этого. Как обычное приложение, вы не сможете отслеживать устройство через установки вашего приложения. Вы не должны быть в состоянии, и этично вы не должны пытаться. Пользователь имеет право "забыть" своим приложением, если они удаляют ваше приложение. Если вы хотите повторно связать свое приложение, ваша система должна иметь какой-то логин, который делает его явным выбором для повторного подключения к вашей системе. Подробнее об этом можно узнать здесь: https://developer.android.com/training/articles/user-data-ids

Ещё вопросы

Сообщество Overcoder
Наверх
Меню