简介
在CocosCreator中,本地存储主要使用sys.localStorage
接口,通过 key–value的格式进行存储。
主要接口有:
接口 | 描述 |
---|---|
setItem(key, value) | 保存指定索引的数据 |
getItem(key) | 获取指定索引的数据 |
removeItem(key) | 移除指定索引的数据 |
clear() | 清空所有数据 |
dgflash
作者分享的 oops–framework 框架是在此基础上进行的二次封装,有着如下的特点:
- 设置用户ID,将key和用户ID组合,避免存储数据被覆盖
- 增加了MD5、AES的第三方库加密,key使用MD5加密, value使用AES加密,增加的数据的安全性
- 在模拟器或浏览器的调试下,不会触发数据加密,方便明文调试
针对于后者,需要NPM的支持安装第三方库crypto-es
,在opps–framework的框架中已经配置。
npm install -g yarn
yarn add crypto-es
主要接口
作者使用dgflash
封装的StorageManager
主要接口如下:
接口 | 返回类型 | 说明 |
---|---|---|
init(key: string, iv: string) | void | 初始化密钥 |
setUser(id: string) | void | 初始化用户ID,默认为空 |
set(key: string, value: any) | void | 存储数据 |
get(key: string, defaultValue: any = “”) | string | 获取数据 |
getNumber(key: string, defaultValue: number = 0) | number | 获取number类型数据 |
getBoolean(key: string) | boolean | 获取boolean类型数据 |
getJson(key: string, defaultValue?: any) | any | 获取Json类型数据 |
remove(key: string) | void | 移除指定字段的数据 |
clear() | void | 清空所有数据 |
注: 密钥的初始化在resources/config.json下localDataKey 和 localDataIv 进行设置
set(key: string, value: any) {
var keywords = `${key}_${this._id}`;
// 检测key字段的合法性
if (null == key) {
console.error("存储的key不能为空");
return;
}
// 检测是否为非调试模式,及非浏览器或模拟器
if (!PREVIEW) {
keywords = EncryptUtil.md5(keywords);
}
// 检测value字段的合法性
if (null == value) {
console.warn("存储的值为空,则直接移除该存储");
this.remove(key);
return;
}
if (typeof value === 'function') {
console.error("储存的值不能为方法");
return;
}
// 对value字段数据进行转换
if (typeof value === 'object') {
try {
value = JSON.stringify(value);
}
catch (e) {
console.error(`解析失败,str = ${value}`);
return;
}
}
else if (typeof value === 'number') {
value = value + "";
}
// 设置value字段加密
if (!PREVIEW && null != this._key && null != this._iv) {
value = EncryptUtil.aesEncrypt(`${value}`, this._key, this._iv);
}
// 存储数据
sys.localStorage.setItem(keywords, value);
}
注意: CocosCreator引擎提供的接口:
setItem(key: string, value: string)
value一定要为string类型,否则会报错。
这里汇总下oops–framework提供的加密库封装主要接口:
接口 | 说明 |
---|---|
initCrypto(key, iv) | 初始化加密库的key和iv |
md5() | 获取md5加密字段 |
aesEncrypt() | AES加密 |
aesDecrypt() | 获取AES解密数据 |
示例
// ../oops-plugin-framework/assets/core/Oop.ts
export class oops {
/** 本地存储 */
static storage: StorageManager = new StorageManager();
}
// 设置用户ID
let userId = "10001";
oops.storage.setUser(uid);
// 设置加密key和vi
// 通过oops.config.game获取resources/config.json中的配置字段
let config = oops.config.game;
let key = config.localDataKey || "key";
let vi = config.localDataIv || "vi";
oops.storage.init("key", "vi");
const LOCAL_STORE_KEY = "game_audio";
// 保存字段
save() {
// 声音音量
this.local_data.volume_music = this._volume_music;
// 音效音量
this.local_data.volume_effect = this._volume_effect;
// 声音开关
this.local_data.switch_music = this._switch_music;
// 音效开关
this.local_data.switch_effect = this._switch_effect;
let data = JSON.stringify(this.local_data);
oops.storage.set(LOCAL_STORE_KEY, data);
}
// 获取字段
load() {
let data = oops.storage.get(LOCAL_STORE_KEY);
if (data) {
try {
this.local_data = JSON.parse(data);
this._volume_music = this.local_data.volume_music;
this._volume_effect = this.local_data.volume_effect;
this._switch_music = this.local_data.switch_music;
this._switch_effect = this.local_data.switch_effect;
}
catch (e) {
this.local_data = {};
this._volume_music = 1;
this._volume_effect = 1;
this._switch_music = true;
this._switch_effect = true;
}
}
}
感谢作者dgflash
的分享,作者CSDN博客: dgflash CSDN
原文地址:https://blog.csdn.net/qq_24726043/article/details/134767132
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_37216.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。