# 本地存储
注:该能力仅在设备端 sp44 及以上版本支持
每个 dpl 技能都可以有自己的本地缓存(基于相同 botId 维度),可以通过相关 API 对本地缓存进行读写和清理。
说明:
- 同一个用户使用同一个 dpl 技能可用的本地存储空间上限为 1MB 。
- 在用户退出登录时,会清空掉当前所有技能使用的本地存储数据。
注意: 同一个账户退出登录后重新登录,由于退登清理策略,原账户的本地存储数据将会丢失。我们不建议将关键信息全部存在本地缓存数据中,以防出现用户频繁切换账户或用户换设备的情况。
# demo
# setStorage
将数据存储在本地缓存中指定的 key 中,会覆盖掉原来该 key 对应的内容。
方法参数
属性名 | 类型 | 必填 | 默认值 | 可选值 | 说明 |
---|---|---|---|---|---|
key | string | 是 | - | - | 本地缓存中的指定的 key,单个 key 的大小限制为 100 字符 |
data | object,string,number,array | 是 | - | - | 需要存储的内容,会将其序列化为字符串后存储,目前对应 data 允许存储的最大数据长度为 100k |
调用方式
通过通用的 InvokeMethod 指令调用,将 setStorage 方法的参数以 key:arguments[0],data: arguments[1] 传入,并支持以 callbackCommands 的指令声明方式接收其异步结果,来进行下一步的交互,并可通过在指令中以表达式引用 $EVENT_ARGS[0] 获取异步结果数据信息;
异步结果数据结构
属性名 | 类型 | 必填 | 默认值 | 可选值 | 说明 |
---|---|---|---|---|---|
state | enum | 是 | - | success,fail | 标识这次操作是否执行完成/发生异常(仅说明操作是否成功) |
msg | string | 否 | - | - | 标识本次操作发生异常(state: fail)时的问题描述 |
使用示例
"dataSource": {
"text1": "hello",
"object1": {
"name": "hi"
},
...
}
// 存文本内容
{
"type": "InvokeMethod",
"componentId": "DPL",
"methodName": "setStorage",
"params": {
"arguments": [
"key1",
"<%= text1 %>"
],
"callbackCommands": [
{
"type": "SendEvent",
"arguments": ["setStorage"]
"componentId": "DPL"
},
{
"type": "InvokeMethod",
"componentId": "DPL",
"methodName": "show",
"params": {
"arguments": [
"Toast",
{
"message": "<%= ($EVENT_ARGS[0].state === 'success' && $EVENT_ARGS[0].res !== '' ? '存数据成功' : '存数据失败')+ ': ' + text1%>",
"timeout": 2000,
"icon": "<%= $EVENT_ARGS[0].state === 'success' && $EVENT_ARGS[0].res !== '' ? '[[SUCCESS]]' : '[[ERROR]]'%>"
}
]
}
}
]
}
}
// 存对象内容
{
"type": "InvokeMethod",
"componentId": "DPL",
"methodName": "setStorage",
"params": {
"arguments": [
"key2",
"<%= object1 %>"
],
"callbackCommands": [
{
"type": "SendEvent",
"arguments": ["setStorage"]
"componentId": "DPL"
},
{
"type": "InvokeMethod",
"componentId": "DPL",
"methodName": "show",
"params": {
"arguments": [
"Toast",
{
"message": "<%= ($EVENT_ARGS[0].state === 'success' && $EVENT_ARGS[0].res !== '' ? '存数据成功' : '存数据失败')+ ': ' + object1.name %>",
"timeout": 2000,
"icon": "<%= $EVENT_ARGS[0].state === 'success' && $EVENT_ARGS[0].res !== '' ? '[[SUCCESS]]' : '[[ERROR]]'%>"
}
]
}
}
]
}
}
# getStorage
从本地缓存中获取指定 key 对应的内容。
方法参数
属性名 | 类型 | 必填 | 默认值 | 可选值 | 说明 |
---|---|---|---|---|---|
key | string | 是 | - | - | 本地缓存中的指定的 key,单个 key 的大小限制为 100 字符 |
调用方式
通过通用的 InvokeMethod 指令调用,将 getStorage 方法的参数以 key:arguments[0]传入,并支持以 callbackCommands 的指令声明方式接收其异步结果,来进行下一步的交互,并可通过在指令中以表达式引用 $EVENT_ARGS[0] 获取异步结果数据信息;
异步结果数据结构
属性名 | 类型 | 必填 | 默认值 | 可选值 | 说明 |
---|---|---|---|---|---|
state | enum | 是 | - | success,fail | 标识这次操作是否执行完成/发生异常(仅说明操作是否成功,对应 key 值不存在也可认为 success, 并返回 res 为空字符串) |
res | object,string,number,array | 否 | - | '' | 获取对应 key 值的本地缓存数据,若不存在对应 key,返回空字符串 |
msg | string | 否 | - | - | 标识本次操作发生异常(state: fail)时的问题描述 |
使用示例
"dataSource": {
"text1": "hello",
"object1": {
"name": "hi"
},
...
}
// 取文本内容
{
"type": "InvokeMethod",
"componentId": "DPL",
"methodName": "getStorage",
"params": {
"arguments": [
"key1"
],
"callbackCommands": [
{
"type": "SendEvent",
"arguments": ["getStorage"]
"componentId": "DPL"
},
{
"type": "InvokeMethod",
"componentId": "DPL",
"methodName": "show",
"params": {
"arguments": [
"Toast",
{
"message": "<%= ($EVENT_ARGS[0].state === 'success' && $EVENT_ARGS[0].res !== '' ? '取数据成功' : '取数据失败')+ ': ' + ($EVENT_ARGS[0].res || '为空')%>",
"timeout": 2000,
"icon": "<%= $EVENT_ARGS[0].state === 'success' && $EVENT_ARGS[0].res !== '' ? '[[SUCCESS]]' : '[[ERROR]]'%>"
}
]
}
}
]
}
}
// 取对象内容
{
"type": "InvokeMethod",
"componentId": "DPL",
"methodName": "getStorage",
"params": {
"arguments": [
"key2"
],
"callbackCommands": [
{
"type": "SendEvent",
"arguments": ["getStorage"]
"componentId": "DPL"
},
{
"type": "InvokeMethod",
"componentId": "DPL",
"methodName": "show",
"params": {
"arguments": [
"Toast",
{
"message": "<%= ($EVENT_ARGS[0].state === 'success' && $EVENT_ARGS[0].res !== '' ? '取对象数据成功' : '取对象数据失败')+ ': ' + ($EVENT_ARGS[0].res.name || '为空')%>",
"timeout": 2000,
"icon": "<%= $EVENT_ARGS[0].state === 'success' && $EVENT_ARGS[0].res !== '' ? '[[SUCCESS]]' : '[[ERROR]]'%>"
}
]
}
}
]
}
}
# getStorageInfo
获取当前技能下本地存储的相关信息。
方法参数
无
调用方式
通过通用的 InvokeMethod 指令调用,将 getStorageInfo 方法名作为指令中的 methodName 参数,来进行下一步的交互,并可通过在指令中以表达式引用 $EVENT_ARGS[0] 获取异步结果数据信息;
异步结果数据结构
属性名 | 类型 | 必填 | 默认值 | 可选值 | 说明 |
---|---|---|---|---|---|
state | enum | 是 | - | success,fail | 标识这次操作是否执行完成/发生异常(仅说明操作是否成功) |
res | object | 否 | - | - | 获取当前的所有本地缓存数据,keys: array[string] 当前本地缓存中所有的 key;currentSize: number 当前占用的空间大小, 单位 KB;limitSize: number 技能限制的总空间大小,单位 KB |
msg | string | 否 | - | - | 标识本次操作发生异常(state: fail)时的问题描述 |
使用示例
{
"type": "InvokeMethod",
"componentId": "DPL",
"methodName": "getStorageInfo",
"params": {
"callbackCommands": [
{
"type": "SendEvent",
"arguments": ["getStorageInfo", "<%= $EVENT_ARGS[0].state%>"]
"componentId": "DPL"
}
]
}
}
# removeStorage
从本地缓存中移除指定 key 以及对应的数据信息。
方法参数
属性名 | 类型 | 必填 | 默认值 | 可选值 | 说明 |
---|---|---|---|---|---|
key | string | 是 | - | - | 本地缓存中的指定的 key,单个 key 的大小限制为 100 字符 |
调用方式
通过通用的 InvokeMethod 指令调用,将 removeStorage 方法的参数以 key:arguments[0]传入,并支持以 callbackCommands 的指令声明方式接收其异步结果,来进行下一步的交互,并可通过在指令中以表达式引用 $EVENT_ARGS[0] 获取异步结果数据信息;
异步结果数据结构
属性名 | 类型 | 必填 | 默认值 | 可选值 | 说明 |
---|---|---|---|---|---|
state | enum | 是 | - | success,fail | 标识这次操作是否执行完成/发生异常(仅说明操作是否成功) |
msg | string | 否 | - | - | 标识本次操作发生异常(state: fail)时的问题描述 |
使用示例
{
"type": "InvokeMethod",
"componentId": "DPL",
"methodName": "removeStorage",
"params": {
"arguments": [
"key1"
],
"callbackCommands": [
{
"type": "SendEvent",
"arguments": ["removeStorage", "<%= $EVENT_ARGS[0].state%>"]
"componentId": "DPL"
}
]
}
}
# clearStorage
清空当前所有的本地数据缓存。
方法参数
无
调用方式
通过通用的 InvokeMethod 指令调用,将 clearStorage 方法名作为指令中的 methodName 参数,并支持以 callbackCommands 的指令声明方式接收其异步结果,来进行下一步的交互,并可通过在指令中以表达式引用 $EVENT_ARGS[0] 获取异步结果数据信息;
异步结果数据结构
属性名 | 类型 | 必填 | 默认值 | 可选值 | 说明 |
---|---|---|---|---|---|
state | enum | 是 | - | success,fail | 标识这次操作是否执行完成/发生异常(仅说明操作是否成功) |
msg | string | 否 | - | - | 标识本次操作发生异常(state: fail)时的问题描述 |
使用示例
{
"type": "InvokeMethod",
"componentId": "DPL",
"methodName": "clearStorage",
"params": {
"callbackCommands": [
{
"type": "SendEvent",
"arguments": ["clearStorage", "<%= $EVENT_ARGS[0].state%>"]
"componentId": "DPL"
}
]
}
}