# 本地存储

注:该能力仅在设备端 sp44 及以上版本支持

每个 dpl 技能都可以有自己的本地缓存(基于相同 botId 维度),可以通过相关 API 对本地缓存进行读写和清理。

说明

  1. 同一个用户使用同一个 dpl 技能可用的本地存储空间上限为 1MB 。
  2. 在用户退出登录时,会清空掉当前所有技能使用的本地存储数据。

注意: 同一个账户退出登录后重新登录,由于退登清理策略,原账户的本地存储数据将会丢失。我们不建议将关键信息全部存在本地缓存数据中,以防出现用户频繁切换账户或用户换设备的情况。

# 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"
            }
        ]
    }
}