繁体   English   中英

Expo-在Android 8.1.0上重新安装App后访问Keystore时出错

[英]Expo - error accessing Keystore after re-installation of App on Android 8.1.0

当我们卸载并重新安装独立应用程序时,当我们尝试通过Expo.SecureStore再次访问Android Keystore时,日志中将引发以下异常:

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中(我们正在使用它来标识推送通知服务的后端设备),以便在重新安装之间保持不变。 在8.1.0以外的其他版本的Android(以及iOS)上,此功能都可以正常运行。

以下设备出现错误:

  • Nexus 5X
  • 三星S9
  • 小蜜

使用Expo SDK可以解决此问题吗?还是要等到下一版本的Expo才能解决此问题?

我查看了AOSP的来源。 自2013年以来,一直存在用于删除与该应用程序关联的密钥库条目的代码(自Android以来(大约在Android开始提供密钥库服务时))。 请参见PackageManagerService的方法removeKeystoreDataIfNeeded()

只是常识,在删除应用程序时保留由该应用程序创建的密钥库条目并没有多大意义。

我们要求将设备UUID缓存在密钥库中

Android不断进行改进,以防止应用程序执行此操作。 作为常规应用程序,您不应能够跨应用程序安装跟踪设备。 您不应该这样做,从道德上讲,您不应该尝试。 如果用户卸载了应用,则有权将其“遗忘”。 如果您想重新关联您的应用程序,您的系统应该具有某种登录名,这使用户可以明确选择重新登录到您的系统。 您可以在这里阅读有关此内容的更多信息: https : //developer.android.com/training/articles/user-data-ids

尝试清除移动设备上的残留数据。 薄雾很可能是您通过运行应用程序存储的内容,并且在卸载时不会清除。

不仅清除缓存,还清除残留数据。

希望这可以帮助。 :)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM