我们目前正在开发一款基于Ionic的应用程序。为了启用新登录并长时间保存数据,我们使用离子存储。在Android仿真(Android 11(中,一切似乎都很好。如果我在智能手机(Android 11(上安装该应用程序,我的脚本会弹出并中断。
该应用程序是一个返回配送服务下一个访问点的应用程序。整个过程与一个与会话一起工作的PHP RestAPI配合使用。会话以及访问数据和其他数据(巡更(应保存在存储器中。为了安全起见,整个AES256是加密的(值(。
有已知的问题吗?我犯了错误吗?
但没有活动错误。到目前为止,这个问题只发生在捆绑器之后的真实设备上。
以下是一些代码片段:
app.module.ts
imports: [
IonicModule.forRoot(),
IonicStorageModule.forRoot({
name: '__tourenApp',
driverOrder: ['sqlite', 'indexeddb', 'websql', 'localstorage'],
}),
...
]
数据处理程序:
Func解密:……
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);
}
版本详细信息:
- Ionic CLI:6.12.1
- 离子角:5.0.0
- 离子存储:2.2.0
- 科尔多瓦:9.0.0
- 角芯:9.0.0
这听起来像是报告的一个错误。显然Ionic Storage没有正确地等待SQLite准备就绪。建议的解决方法是手动等待底层localForage的就绪事件:
const localForage = await this.storage.ready();
localForage.ready(() => {
// use storage
});
我和一位专家一起发现了这个错误。错误在驱动程序中。科尔多瓦的sqlite显然存在问题。因此,对于以下所有信息,不幸的是,它只适用于驾驶员变体";本地存储";。