context.next()
调起启动链的下一个场景,一般是Weex页面使用。
例如:中心服务器配置(central.json)文件里配置了启动链,如:
"chains":{ "startup": ["main.splashscreen","main.launcher"] }
在用weex写的splashscreen场景的源码里,想跳到启动链的下个场景launcher,直接调用context.next(),这样就不用指定具体的场景Id。
context.finish()
完成场景,即关闭当前页面、退出当前场景。
context.launchStage(“场景ID例如main.login”)
调起一个新场景(并保持当前场景)。
此时原生的当前页面栈中会push一个新页面。
场景ID格式:“repoId.stageId” ,
例如repo.json文件中仓库Id为main, central.json文件中某个场景功能Id为login , 则场景ID为"main.login"
用途:
1、在应用内打开第3方H5 页面(但是这个H5页面没办法回退到App之前的页面,所以其实这种方式很少用)
通过 launchStage 或 replaceStage 指令,使用客户端内嵌 WebView 打开第3方H5页面。用法:context.launchStage("http://www.example.com/index.html");
context.launchStage(“加ext:前缀的带scheme的Url”) 或context.replaceStage (“加ext:前缀的带scheme的Url”)
用途:
1、从MADP2.0客户端调起手机自带浏览器去打开一个URL。用法:context.launchStage("ext:http://www.example.com/index.html")
2、从MADP2.0客户端打开手机上已安装的其他APP(已设置scheme的) 。用法:
context.launchStage("ext:其他app设置的scheme名字://xxxx?key=value")
3、调起系统的一些功能,例如调用系统的拨打电话功能。 用法:
context.launchStage("ext:tel://10086")
iOS正常, Android的华为,三星手机也正常, 就小米的手机调出的拨打电话页面, 电话号码前边带//, 但是拨打仍然能打通。
context.replaceStage(“场景ID例如main.login”)
调起一个新场景(并替换掉当前场景)。
此时原生的当前页面栈中会先pop当前页面然后再push一个新页面。
context.getParam(“参数key”)
获取上个场景跳转时在场景Id后边用?传递过来的参数。提供参数key,返回这个参数key的值(返回值是string字符串)。
例如:在要跳转场景时,在场景Id后边可以携带一些参数,如:context.launchStage("main.CameraPhoto?type=1")
或者
let msg = { Remark: "电汇", CurrencyCode: "人民币", ToAcctNo: "622908423010961215", ToAcctName: "张三" }; context.launchStage("main.pay?data=" + JSON.stringify(msg));
然后在要跳转到的那个场景页面里边,通过context.getParam(“某个key”)来取值。
let type = context.getParam("type"); // type值"1" let data = context.getParam("data"); // data值为json字符串
context.setToken(“JWT字符串”)
设置服务器签发的JSON Web Token字串,一般是Weex登录页面在登录交易成功后调用 context.setToken(“JWT字符串”)。
关于JWT字符串的生成,可以上官网https://jwt.io/, 官网网页有提供工具。
Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准。
JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器 获取资源,也可以增加一些额外的其它业务逻辑所必须的声明信息,该token也可直接被用于认证,也可被加密。
Token形式: JWT是由三段信息构成的,将这三段信息文本用.链接一起就构成Token字符串,例如:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.cThIIoDvwdueQB468K5xDc5633seEFoqwxjF_xSJyQQ
context.clearToken()
清除客户端内的JWT形式的Token,即退出登录,一般是Weex页面在做退出登录交易成功后调用。
context.checkToken()
验证JWT token是否有效。返回int,0为无效,1为有效。
context.getTokenClaimString(“键名”)
取JWT token中claim的值,这是token生成时打包进去的。返回string。
context.getTokenClaimKeys()
获取JWT token中所有的claim的key列表,返回string(格式是用逗号分隔各个key)。
context.sessionSetString(“键名”, “键的值”)
给会话存储中设置一个键值对(键的值是字符串类型,可以是json字符串),所有场景可以通过
context.sessionGetString("键名")
取出该键对应的值。
会话结束后该键值会销毁。
会话存储是将数据存储在app运行内存中,会话存储的生命周期为App运行期间。当App被关闭后,会话存储里的数据会被销毁。
用途:一般用于不同场景之间传递数据用。
如果某个键不再被需要,可以主动做清除处理,避免会话存储越来越臃肿,占用内存,如:context.sessionSetString("键名", "")
, 置空某个键。
context.sessionGetString(“键名”)
从会话存储中取出一个键对应的值,返回string字符串(普通字符串,也可能是json字符串) 。
context.secureSetString(“键名”, “键的值”)
给安全持久存储(加密方式为aes的cfb模式)中设置一个键值对(键的值是字符串类型,可以是json字符串),所有场景可以取出该键值。
安全持久存储会加密存储在手机App应用在磁盘的对应数据区文件中,App被关闭后,磁盘上存储的加密数据还在。
context.secureGetString(“键名”)
从安全持久存储(加密方式为aes的cfb模式)中取出一个键对应的值,返回明文的string字符串(普通字符串,也可能是json字符串)。
context.setTimestamp(“时间戳字符串”)
往会话存储中存储时间戳。
context.getTimestamp()
取出存放在会话存储中的时间戳,返回值是string。
context.envGet(‘参数key’)
获取客户端应用一些环境变量的值,返回string。
可传入的参数key如下:DataDir //取得Document路径。 CacheDir //取得Cache路径。 TmpDir //取得Tmp路径。 BundleDir //取得Main Bundle路径。 FrameworkDir //取得Framework Bundle路径。 OSType //取得平台类型,返回ios或android。 DeviceID //取得设备唯一标识符。 //(Android返回的是设备唯一标识符。 iOS //返回的不是严格意义的设备唯一标识符,返回值取用的是 UIDevice.currentDevice.identifierForVendor.UUIDString, App卸载重装后这个值是会变的)。 UniqueID //取得设备唯一标识符。(Android返回的是设备唯一标识符。 iOS采用uuid+keychain的方式,不保证稳定,还原和更新系统值会变)。 ApplicationID //应用bundleId,应用唯一标识。 versionName //取得app版本名,例如1.0.0。 versionCode //取得app版本号, Android返回是不带点的数字例如1,可递增的。iOS返回是1.0.0等同versionName。 IsRooted //获取设备是否root或者越狱,可以用weexmodule获取。
参考:https://weexapp.com/zh/docs/api/weex-variable.html#config如果是在weex页面,也可以借助WeexSDK自带的Weex环境变量,获取一些设备环境变量值。 有时候为了兼容性或者为了增强某个端上的能力,需要编写平台特异的代码。 Weex 提供了 weex.config.env 和全局的 WXEnvironment 变量(它们是等价的)来获取当前执行环境的信息。
例如:
context.getMappedFileUrl(“file路径”)
经ServiceWorker层处理后,返回http url形式文件路径。返回类型string。
入参file路径是类似绝对路径"file://var/…/xxx.js " 或不带file://。
返回的文件路径格式是http://ip:port/…/xxx.js,其中port端口是ServiceWorker层在手机本地起的服务的端口,ServiceWorker能拦截处理这种url请求,然后从手机本地找到该文件。
context.getMappedUrl (“path路径”)
经ServiceWorker层处理后,返回http url形式文件路径。返回类型string。
入参path路径是类似相对路径"./xxx/xxx/xxx.png" 或者 “../xxx/xxx/xxx.png”。
返回的文件路径格式是http://ip:port/…/xxx.png,其中port端口是ServiceWorker层在手机本地起的服务的端口,ServiceWorker能拦截处理这种url请求,然后从手机本地找到该文件。
context.handleQRCode (“二维码扫描结果字符串”)
返回值类型int。
(1)返回为 0 时,代表扫码结果没有被serviceWorker层处理,需要应用层自行判断和处 理。
例如:const qrCode = weex.requireModule("qr-code"); testQRCode() { qrCode.scanQRcode(data => { let ret = context.handleQRCode(data); if (ret == 0) { modal.alert({ message: data, duration: 0.3 }); } }); }
(2)返回值为非 0 时,代表 serviceWorker已处理完扫码结果,会自动加载新场景或进行其他操作,不需要应用层做后续判断。
例如:
二维码调用在repo.json中已定义好的场景,指令格式如下:
引导页 URL?format=QRC&stage=场景 URL 的 base64 编码&key=数字签名
例如:https://demo.madp.tech/qrcode.html?format=QRC&stage=bWFpbi5sYXVuY2hlcgo=&key=NNN用 MADP 2.0 客户端扫码,产品库serviceWorker层会解析并执行包含的指令,然后返回非0;用非 MADP2.0 客户端扫码,比如微信扫码,会显示引导页面,一般用于提示打开或下载 MADP2.0 客户端。
context.hashSHA256(“plaintext”)
计算传入的字符串的SHA256。返回string。
context.deviceSignature()
返回一个唯一的设备指纹,可用于绑定设备。返回类型string。
设备指纹是MADP2.0产品库里由多个要素经一定算法生成的,在app安装以后每次启动设备指纹都是一样的。
注意,因为iOS设备指纹计算参考的其中一个要素是IDFV,所以iOS app卸载重装后IDFV变了,设备指纹也就变了。
context.isDynamicIsland()
返回是否为灵动岛机型,可用于机型判断。返回类型bool。
注意,此api只在ios上生效,版本号:SDK Version 需大于等于 1442。
context.isStageAvailable (“场景ID例如main.login”)
检查某个场景是否可用。传入场景ID,返回int型 ,0表示场景不可用,1表示场景可用。用于做条件化,在repo.json的该场景配置里指定相关参数,决定场景是否可用。
例如,在iOS下某场景可用,Android设备则不可用。
context.refreshRepo(“仓库ID例如main”)
强制刷新仓库内容,让MADP后管的修改能在客户端上反映出来,例如客户端上首页的下拉刷新功能。返回值是int型,0为成功,非0为失败。
context.getEnvKeys()
返回string。获取注册表registry.json文件中定义的环境列表,返回一个用逗号分隔的字符串。例如:“生产环境,开发环境,UAT环境”。
背景说明:
MADP2.0 SDK支持多环境间切换,在项目上同一套代码中,在注册表registry.json文件中定义多种环境配置信息,通过context提供的相关方法实现应用内切换,避免反复的打包、安装。环境定义介绍:
在注册表registry.json文件中,需要加入对新环境的定义(env、central_url等字段)及环境启动条件的表达式(rule_前缀节点及其中的rule字段)。最外层的env字段和central_url是默认环境, 默认环境值可以是“生产环境”,也可以是其他环境。 最外层的env字段值如果是“生产环境”,那么最外层的central_url值就配置成生产环境url。
例如:{"env":"生产环境", "central_url":"https://demo.madp.tech/debugger/central.dat", "central_alg":"aes256cfb", "central_key":"Q1NJSSBrZXkgZXhhbXBsZQ==", "securestore_alg":"aes256cfb", "securestore_key":"Q1NJSSBrZXkgZXhhbXBsZQ==", "rule_dev": { "rule": "envString('env')=='开发环境'", "env": "开发环境", "central_url":"https://demo.madp.tech/debugger/dev/central.dat" }, "rule_uat": { "rule": "envString('env')=='UAT环境'", "env": "UAT环境", "central_url":"https://demo.madp.tech/debugger/uat/central.dat" }, "customField": "自定义字段的值" }
另外,注册表registry.json中支持放入自定义字段,例如上边的customField字段,并通过context.getRegistryString(“key”)方法来获取。比如第三方服务器的URL、用户行为分析系统的URL及配置等等。
context.switchEnv(“环境名称”)
切换服务器环境,参数“环境名称”是环境名称,比如“开发环境”。调用switchEnv(“环境名称”)后,需要产品SDK层或者前端主动弹框提示用户重启应用切换的环境才生效。 想获知注册表registry.json里都配置了哪些环境名称,可以调用context.getEnvKeys()查看返回值中含的环境名称列表。
关于环境切换,可参见context.getEnvKeys()的背景说明。
context.getRegistryString(“自定义字段”)
获取注册表registry.json里的自定义字段的值。返回string。
方便开发人员统一通过注册表registry.json植入配置信息并可在后管进行更改,而不是写死在代码里。关于注册表的自定义字段,可参见context.getEnvKeys()的背景说明。
context.handleBack(true/false)
是否由WebView的JS处理Android的物理返回按键。
默认是false, 即不由JS处理,而是由原生处理webview的web页面的物理键返回,然后配合MADP2.0自定义clickbackitem事件使用。
注意:Android端专用。此方法只在Android端使用。
context.getDeviceInfo()
返回json对象,对象含有键status_bar_height,表示iOS设备屏幕顶部系统状态栏高度。iPoneX和普通iPhone状态栏高度不一样。
注意:iOS端专用, 且只能weex页面使用,不能在纯vue.js和vx页面使用。
context.getTabbarHeight()
返回json对象,对象含有键tab_bar_height,表示iOS应用首页底部tab栏高度。iPoneX和普通iPhone Tab栏高度不一样。
注意:iOS端专用, 且只能weex页面使用,不能在纯vue.js和vx页面使用。
context.statusBarDarkFont(“yes"或"no”)
页面显示后,调用此API可动态改变页面状态栏字体颜色。
如果想在页面初始化时就设置状态栏字体颜色,可以在仓库配置文件repo.json中场景参数params字段中配置x-statusBarDarkFont字段,例如:注意:这个方法只能在weex页面调用。
1)参数写"yes"或者"",默认,状态栏字体黑色。
2)参数写"no",状态栏字体白色。"params": { "x-statusBarDarkFont ": "no" }
context.proxyGetAddress()
返回MADP SDK中ServiceWorker层的代理服务地址。因为ServiceWorker会在本地起个服务。这个方法,返回地址字符串,带主机及端口。
context.proxyGetHost ()
返回MADP SDK中ServiceWorker层的代理服务地址的主机host。
context.proxyGetPort ()
返回MADP SDK中ServiceWorker层的代理服务地址的端口,返回类型是long整形。
context.handleGray(“userId”)
处理灰度,返回值0-失败,1-成功
context.getAppInfo()
返回json对象,用于获取应用信息:应用ID,CID,用户行为分析地址等
context.reload()
用于weex错误页面重新载入当前场景
context.finishTo(“stageId”)
用于关闭指定场景(原生反向遍历栈,找到指定场景后移除,期间遍历的场景全部关闭【含第三方】)
context.navigationGetCurrent()
获取当前栈顶场景
context.secureGetSm4(“key”)
从安全持久存储(加密方式为sm4)中取出一个键对应的值,返回明文的string字符串(普通字符串,也可能是json字符串)。
context.secureSetSm4(“key”, “value”)
给安全持久存储(加密方式为sm4)中设置一个键值对(键的值是字符串类型,可以是json字符串),所有场景可以取出该键值。
安全持久存储会加密存储在手机App应用在磁盘的对应数据区文件中,App被关闭后,磁盘上存储的加密数据还在。
context.getUserGroup()
返回json对象,用于获取在Capricorn后管中设置的客群信息。