-
小程序可以通过下面列出的API读取、写入、删除、清理本地缓存数据。与LocalStorage类似。本地缓存数据以用户+小程序纬度隔离,同一台设备上,不同用户之间、不同小程序之间,本地缓存数据不可互访。⚠️注意本地缓存数据的上限约为10MB,同时也受到用户设备存储空间、缓存清理等机制的限制,可能会导致信息丢失。因此请不要将重要数据存放在本地数据缓存
APIChecklistgetStoragegetStorageSyncsetStoragesetStorageSyncremoveStorageremoveStorageSyncclearStorageclearStorageSyncgetStorageInfogetStorageInfoSync
本地缓存数据类型小程序默认支持以下数据类型,存储和获取时无需类型转换。其它数据类型可根据需要在处理时转换为字符串存储,强行操作会导致数据丢失。StringObjectArrayNumberDateBooleanUndefinedNull
-
检查用户当前的session状态是否有效。
输入继承标准对象输入,无扩展属性
输出各callback参数均无额外属性
代码示例 tt.checkSession({success(res){console.log(`session未过期`);},fail(res){console.log(`session已过期,需要重新登录`);}});
-
有时,自定义组件模版中的一些节点,其对应的自定义组件不是由自定义组件本身确定的,而是自定义组件的调用者确定的。这时可以把这个节点声明为“抽象节点”。例如,我们现在来实现一个“选框组”(selectable-group)组件,它其中可以放置单选框(custom-radio)或者复选框(custom-checkbox)。这个组件的ttml/wxml可以这样编写:在selectable-group.ttml中:view:for={{labels}}labelselectabledisabled={{false}}/selectable{{item}}/label/view其中,selectable不是任何在json文件的usingComponents字段中声明的组件,而是一个抽象节点。它需要在componentGenerics字段中声明:{componentGenerics:{selectable:true}}
使用包含抽象节点的组件在使用selectable-group组件时,必须指定selectable具体是哪个组件:selectable-groupgeneric:selectable=custom-radio/这样,在生成这个selectable-group组件的实例时,selectable节点会生成custom-radio组件实例。类似地,如果这样使用:selectable-groupgeneric:selectable=custom-checkbox/selectable节点则会生成custom-checkbox组件实例。注意:上述的custom-radio和custom-checkbox需要包含在这个ttml对应json文件的usingComponents定义段中。{usingComponents:{custom-radio:path/to/custom/radio,custom-checkbox:path/to/custom/checkbox}}
抽象节点的默认组件抽象节点可以指定一个默认组件,当具体组件未被指定时,将创建默认组件的实例。默认组件可以在componentGenerics字段中指定:{componentGenerics:{selectable:{default:path/to/default/component}}}注意:节点的generic引用generic:xxx=yyy中,值yyy只能是静态值,不能包含数据绑定。因而抽象节点特性并不适用于动态决定节点名的场景。
-
以查询游戏币余额的接口为例
原始请求信息支付秘钥key:da8d182e1cashjkulkof6ae22a4a918457HTTP请求方式:POST请求的URI:/api/apps/game/wallet/get_balance
签名算法参与签名请求参数{openid:fge35vh5h3f2,appid:tthdch45hd2df,zone_id:1,access_token:hds2rt6bhgh5wfg5nf4gdh6,ts:1507530737,pf:android}对参与签名的参数按照key=value的格式,并按照参数名ASCII字典序升序排序如下:stringA=access_token=hds2rt6bhgh5wfg5nf4gdh6&appid=tthdch45hd2df&openid=fge35vh5h3f2&pf=android&ts=1507530737&zone_id=1拼接uri、method:stringB=stringA+&org_loc=/api/apps/game/wallet/get_balance&method=POST把支付秘钥作为key,使用HMAC-SHA256得到签名sig=hmac_sha256(key,stringB)。sig=hmac_sha256(key,stringB)=4317496a530d0593fa4365ca87714a12c9e6edd4df1fea5fe1f5e5d6a1781a78
-
校验数据合法性当开发者通过getUserInfo接口请求到敏感数据时,返回的signature字段是在小程序服务器端通过如下算法得到:signature=sha1(`${rawData}${session_key}`)开发者可以在自己的服务器端执行同样的算法,来校验数据是否合法。
解密敏感数据对称解密使用的算法为AES-128-CBC,数据采用PKCS
7填充。对称解密的目标密文为encryptedData。对称解密秘钥aeskey=Base64_Decode(session_key),aeskey长度为16Byte。对称解密算法初始向量为Base64_Decode(iv)。
-
⚠️注意基础库1.12.0开始支持
场景值ID与入口位置对应关系表场景值ID说明011001搜索页固定入口-上方最近使用011002搜索页固定入口-上方推荐011003搜索页固定入口-下方推荐011004我的-小程序列表011006我的-小程序列表推荐列表入口011007扫一扫011008业务固定入口011009小程序跳小程序011010小程序返回小程序012001全局搜索结果012002小程序列表搜索结果012003搜索阿拉丁013001分享的微头条013002小视频详情页入口,包括小程序和小游戏秒玩013003小视频详情页入口-小游戏挑战013004小视频详情页评论区013005文章详情页入口013007话题详情页入口013008头条号个人主页入口013009游戏频道置顶小游戏卡片013010发布的微头条013011feed流小游戏小卡片013012feed流小游戏大卡片013013feed流小程序卡片014001分享到微信对话014002分享到微信朋友圈014003分享到QQ对话014004分享到Qzone014005分享到钉钉014006系统分享014007复制链接014008私信015001频道顶部widget015002钱包入口016001文章详情页匹配广告016002Feed流广告016003开屏广告
获取方式对于小程序,可以在App的onLaunch和onShow,或tt.getLaunchOptionsSync中获取上述场景值。对于小游戏,可以在tt.getLaunchOptionsSync和tt.onShow中获取上述场景值。
-
框架以栈的形式维护了当前的所有页面。
页面栈当发生路由切换的时候,页面栈的表现如下:属性类型初始化新页面入栈打开新页面新页面入栈页面重定向当前页面出栈,新页面入栈页面返回页面不断出栈,直到目标返回页Tab切换页面全部出栈,只留下新的Tab页面重加载页面全部出栈,只留下新的页面
getCurrentPages()getCurrentPages()函数用于获取当前页面栈的实例,以数组形式按栈的顺序给出,第一个元素为首页,最后一个元素为当前页面。
路由方式下面是路由的控制接口:路由方式触发时机路由前页面路由后页面初始化小程序打开的第一个页面onLoad,onShow打开新页面调用APItt.navigateTo或使用组件navigatoropen-type=navigateTo/onHideonLoad,onShow页面重定向调用APItt.redirectTo或使用组件navigatoropen-type=redirectTo/onUnloadonLoad,onShow页面返回调用APItt.navigateBack或使用组件navigatoropen-type=navigateBack或用户按左上角返回按钮onUnloadonShowTab切换调用APItt.switchTab或使用组件navigatoropen-type=switchTab/或用户切换Tab各种情况请参考下表重启动调用APItt.reLaunch或使用组件navigatoropen-type=reLaunch/onUnloadonLoad,onShowTab切换对应的生命周期(以A、B页面为Tabbar页面,C是从A页面打开的页面,D页面是从C页面打开的页面为例):当前页面路由后页面触发的生命周期(按顺序)AANothinghappendABA.onHide(),B.onLoad(),B.onShow()AB(再次打开)A.onHide(),B.onShow()CAC.onUnload(),A.onShow()CBC.onUnload(),B.onLoad(),B.onShow()DBD.onUnload(),C.onUnload(),B.onLoad(),B.onShow()D(从转发进入)AD.onUnload(),A.onLoad(),A.onShow()D(从转发进入)BD.onUnload(),B.onLoad(),B.onShow()
Tips:navigateTo,redirectTo只能打开非tabBar页面。switchTab只能打开tabBar页面。reLaunch可以打开任意页面。页面底部的tabBar由页面决定,即只要是定义为tabBar的页面,底部都有tabBar。调用页面路由带的参数可以在目标页面的onLoad中获取。
-
TTSS是一套样式语言,用于描述TTML的组件样式。为了适应广大的前端开发者,TTSS具有CSS大部分特性。同时TTSS对CSS进行了扩充以及修改。与CSS相比,TTSS扩展的特性有:尺寸单位样式导入
尺寸单位rpx(responsivepixel):可以根据屏幕宽度进行自适应。规定屏幕宽为750rpx。如在iPhone6上,屏幕宽度为375px,共有750个物理像素,则750rpx=375px=750物理像素,1rpx=0.5px=1物理像素。设备rpx换算px(屏幕宽度/750)px换算rpx(750/屏幕宽度)iPhone51rpx=0.42px1px=2.34rpxiPhone61rpx=0.5px1px=2rpxiPhone6Plus1rpx=0.552px1px=1.81rpx建议:设计师可以用iPhone6作为视觉稿的标准。
样式导入使用@import语句可以导入外联样式表,@import后跟需要导入的外联样式表的相对路径,用;表示语句结束。
示例代码:/**common.ttss**/.small-p{padding:5px;}/**app.ttss**/@importcommon.ttss;.middle-p{padding:15px;}
内联样式框架组件上支持使用style、class属性来控制组件的样式。style:静态的样式统一写到class中。style接收动态的样式,在运行时会进行解析,请尽量避免将静态的样式写进style中,以免影响渲染速度。viewstyle=color:{{color}};/class:用于指定样式规则,其属性值是样式规则中类选择器名(样式类名)的集合,样式类名不需要带上.,样式类名之间用空格分隔。viewclass=normal_view/
选择器目前支持的选择器有:选择器样例样例描述.class.intro选择所有拥有class=intro的组件
id
firstname选择拥有id=firstname的组件elementview选择所有view组件element,elementview,checkbox选择所有文档的view组件和所有的checkbox组件::afterview::after在view组件后边插入内容::beforeview::before在view组件前边插入内容
全局样式与局部样式定义在app.ttss中的样式为全局样式,作用于每一个页面。在page的ttss文件中定义的样式为局部样式,只作用在对应的页面,并会覆盖app.ttss中相同的选择器。