Как я могу использовать этот провайдер?Я написал кеш-сервис для моего приложения следующим образом.
cache-service.ts
import { Injectable } from '@angular/core';
import { Storage } from '@ionic/storage';
import { SecureStorageProvider } from '../secure-storage/secure-
storage';
@Injectable()
export class CacheServiceProvider {
constructor(
private secureStorage:SecureStorageProvider,
) {
}
getCache(key: string) {
return new Promise((resolve, reject) => {
this.secureStorage.get(key).then((val) => {
console.error(key,"Value is found......", val);
if (val != undefined) {
if(val===false){
return false;
}else{
resolve(val);
}
} else {
reject({'msg':'value not found'});
}
});
})
}
setCache(key: string, value: any) {
this.secureStorage.set(key,value);
}
removeCache(key: string) {
this.secureStorage.remove(key);
}
clearCache() {
this.secureStorage.clear();
}
}
secure-storage.ts:
import { Injectable } from '@angular/core';
import { Storage } from '@ionic/storage';
import CryptoJS from 'crypto-js';
@Injectable()
export class SecureStorageProvider {
secret: string = '';
localData: Object = {};
storekey: string = "secretdata";
constructor(
private storage: Storage
) { }
initStorage(secret) {
this.secret = secret;
return this.storage.ready()
.then(() =>
{ return this.storage.get(this.storekey)
.then(data => {
this.localData={};
console.log("THIS IS WHERE IT ALL BEGINS",secret);
if (data != null) {
this.localData = this.decrypt(data,
this.secret);
return true
} else return false
})})
}
encrypt(data, key) {
return CryptoJS.AES.encrypt(JSON.stringify(data), key).toString();
}
decrypt(data, key) {
let bytes = CryptoJS.AES.decrypt(data, key);
return JSON.parse(bytes.toString(CryptoJS.enc.Utf8));
}
setOnly(key, data) {
this.localData[key] = data;
return Promise.resolve(true);
}
get(key) {
if (this.localData[key])
return Promise.resolve(this.localData[key])
else return Promise.resolve(null);
}
changeSecret(newsecret) {
this.secret = newsecret;
return this.storage.ready()
.then(() => {
return this.storage.set(this.storekey,
this.encrypt(this.localData ? this.localData : '',
this.secret));
})
}
set(key, data) {
this.setOnly(key, data);
return this.storage.ready()
.then(() => {
return this.storage.set(this.storekey,
this.encrypt(this.localData ? this.localData : '',
this.secret));
})
}
remove(key:any){
if (this.localData[key]){
delete this.localData[key];
this.storage.set(this.storekey,
this.encrypt(this.localData ? this.localData : '',
this.secret));
return Promise.resolve(this.localData[key]);
}else{
return Promise.resolve(null);
}
}
clear()
{
this.storage.clear();
}
}
Над кодом работает нормально в Android, но не в iOS.
Для Android он работает нормально, и мы получаем значение для каждого установленного ключа.Но для iOS я не могу отладить, почему он не работает.Я пробовал симулятор, а также устройство.Он устанавливает значение, но никогда не читает его.