Expo - ошибка доступа к Keystore после переустановки приложения на Android 8.1.0 - PullRequest
0 голосов
/ 13 октября 2018

Когда мы удаляем и переустанавливаем наше автономное приложение, мы получаем следующее исключение в журналах, когда мы пытаемся снова получить доступ к хранилищу ключей 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 нашего устройства кэшировался в хранилище ключей (мы используем его для идентификации устройств в нашем бэкенде для нашей службы push-уведомлений), чтобы он сохранялся между переустановками.Это отлично работает на других версиях Android (и iOS), кроме 8.1.0.

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

  • Nexus 5X
  • Samsung S9
  • Xiaomi

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

Ответы [ 2 ]

0 голосов
/ 19 мая 2019

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

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

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

0 голосов
/ 15 октября 2018

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

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

мы требуем, чтобы UUID нашего устройства кэшировался в хранилище ключей.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...