离子5 |本机设备上的存储未就绪
Ionic5 | Storage not ready on native Device
我们目前正在开发基于 Ionic 的应用程序。为了启用新登录并长期保留数据,我们使用离子存储。在 Android 仿真 (Android 11) 中,一切似乎都运行良好。如果我在我的智能手机上安装该应用程序 (Android 11),我的脚本会弹出并中断。
该应用是 returns 送货服务的下一个接入点。整个事情与 PHP-RestAPI 一起工作,它与会话一起工作。会话以及访问数据和其他数据(游览)应保存在存储器中。为了安全起见,整个 AES256 都被加密(值)。
有已知问题吗,我是不是搞错了?
但是没有主动错误。到目前为止,问题只发生在捆绑器之后的真实设备上。
以下是一些代码片段:
app.module.ts
imports: [
IonicModule.forRoot(),
IonicStorageModule.forRoot({
name: '__tourenApp',
driverOrder: ['sqlite', 'indexeddb', 'websql', 'localstorage'],
}),
...
]
数据处理程序:
函数解密:
....
const result = await this.storage.get(key);
if (typeof result !== 'undefined' && result !== '' && result !== null) {
try {
const res: string = await this.aes256.decrypt(this.secureKey, this.secureIV, result);
this.srvUtil.logMessage(`Eintrag '${key}' mit Wert '${res}' entschlüsselt und aus dem lokalem Speicher geholt`);
return res;
} catch (error) {
this.srvUtil.logMessage(`Es konnten keine Daten für den Key '${key}' aus dem Speicher geholt werden`, MessageType.Error);
}
} else {
return '';
}
... Encrypt-Func:
try {
const res = await this.aes256.encrypt(this.secureKey, this.secureIV, value);
await this.storage.set(key, res);
this.srvUtil.logMessage(`Neuen Eintrag '${key}' mit Wert '${value}' verschlüsselt und im lokalem Speicher gesichert`);
} catch (error) {
this.srvUtil.logMessage(
`Fehler beim Setzen eines neuen Storage Eintrags mit dem Key ${key} und dem Wert ${value}`, MessageType.Error);
}
版本详情:
- 离子 CLI:6.12.1
- 离子Angular:5.0.0
- 离子存储:2.2.0
- 科尔多瓦:9.0.0
- Angular-核心:9.0.0
这听起来像 a bug that was reported。显然 Ionic Storage 没有正确等待 SQLite 准备就绪。建议的解决方法是手动等待底层 localForage 的就绪事件:
const localForage = await this.storage.ready();
localForage.ready(() => {
// use storage
});
我和专家一起发现了错误。错误在驱动程序中。 Cordova下用sqlite明显有问题。因此,对于以下所有信息,不幸的是,它仅适用于驱动程序变体“localstorage”。
我们目前正在开发基于 Ionic 的应用程序。为了启用新登录并长期保留数据,我们使用离子存储。在 Android 仿真 (Android 11) 中,一切似乎都运行良好。如果我在我的智能手机上安装该应用程序 (Android 11),我的脚本会弹出并中断。
该应用是 returns 送货服务的下一个接入点。整个事情与 PHP-RestAPI 一起工作,它与会话一起工作。会话以及访问数据和其他数据(游览)应保存在存储器中。为了安全起见,整个 AES256 都被加密(值)。
有已知问题吗,我是不是搞错了?
但是没有主动错误。到目前为止,问题只发生在捆绑器之后的真实设备上。
以下是一些代码片段:
app.module.ts
imports: [
IonicModule.forRoot(),
IonicStorageModule.forRoot({
name: '__tourenApp',
driverOrder: ['sqlite', 'indexeddb', 'websql', 'localstorage'],
}),
...
]
数据处理程序:
函数解密: ....
const result = await this.storage.get(key);
if (typeof result !== 'undefined' && result !== '' && result !== null) {
try {
const res: string = await this.aes256.decrypt(this.secureKey, this.secureIV, result);
this.srvUtil.logMessage(`Eintrag '${key}' mit Wert '${res}' entschlüsselt und aus dem lokalem Speicher geholt`);
return res;
} catch (error) {
this.srvUtil.logMessage(`Es konnten keine Daten für den Key '${key}' aus dem Speicher geholt werden`, MessageType.Error);
}
} else {
return '';
}
... Encrypt-Func:
try {
const res = await this.aes256.encrypt(this.secureKey, this.secureIV, value);
await this.storage.set(key, res);
this.srvUtil.logMessage(`Neuen Eintrag '${key}' mit Wert '${value}' verschlüsselt und im lokalem Speicher gesichert`);
} catch (error) {
this.srvUtil.logMessage(
`Fehler beim Setzen eines neuen Storage Eintrags mit dem Key ${key} und dem Wert ${value}`, MessageType.Error);
}
版本详情:
- 离子 CLI:6.12.1
- 离子Angular:5.0.0
- 离子存储:2.2.0
- 科尔多瓦:9.0.0
- Angular-核心:9.0.0
这听起来像 a bug that was reported。显然 Ionic Storage 没有正确等待 SQLite 准备就绪。建议的解决方法是手动等待底层 localForage 的就绪事件:
const localForage = await this.storage.ready();
localForage.ready(() => {
// use storage
});
我和专家一起发现了错误。错误在驱动程序中。 Cordova下用sqlite明显有问题。因此,对于以下所有信息,不幸的是,它仅适用于驱动程序变体“localstorage”。