Когда мы удаляем и переустанавливаем наше автономное приложение, получаем следующее исключение в журналах, когда мы снова пытаемся получить доступ к 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.
Следующие устройства дают ошибки:
Есть ли какие-либо исправления, которые можно сделать с помощью Expo SDK, чтобы исправить это, или нам придется подождать до следующей версии Expo для исправления?
Попробуйте удалить остаточные данные на вашем мобильном устройстве. Возможно, вы запустили что-то, запустив свое приложение, и оно не очищается во время удаления.
Очистить не только кеш, но и остаточные данные.
Надеюсь это поможет. :)
Я посмотрел на источник AOSP. AFAICT код для удаления записей хранилища ключей, связанных с приложением, когда это приложение было удалено, существует с ~ 2013 года (это происходит, когда Android начал предоставлять службу хранилища ключей). См. Метод removeKeystoreDataIfNeeded()
в PackageManagerService
.
Просто здравый смысл, не имеет смысла сохранять записи хранилища ключей, созданные приложением, когда это приложение удаляется.
мы требуем, чтобы наш UUID устройства был кэширован в Keystore
Android постоянно совершенствует, чтобы приложения не делали этого. Как обычное приложение, вы не сможете отслеживать устройство через установки вашего приложения. Вы не должны быть в состоянии, и этично вы не должны пытаться. Пользователь имеет право "забыть" своим приложением, если они удаляют ваше приложение. Если вы хотите повторно связать свое приложение, ваша система должна иметь какой-то логин, который делает его явным выбором для повторного подключения к вашей системе. Подробнее об этом можно узнать здесь: https://developer.android.com/training/articles/user-data-ids