开发

扩展api

在 extensionJs 中添加 api 入口

在 demo-program-extension/1.0.0 目录,extension.js 中,修改前端框架 extensionJs 的实现,
在 hostMethodDescriptions 内添加一个新的 api 描述,在 methods 中增加调用

// 宿主名称,也是api的命名空间,在此文件内的api会以swan.demo.xxx的方式调用
name: 'demo',
// hostMethodDescriptions是api的参数描述,name就是上面schemeHandlers中的key字段,也是middleWares里scheme的action
hostMethodDescriptions: [{
    name: 'demo',
    args: [
        {name: 'data', value: 'Object='},
        {name: 'cb', value: 'string'}
    ]
}],
// methods是暴露给开发者的方法名,即swan.demo.xxx的xxx部分
// methods下的key和schemeHandlers的key不要求一致,比如下面的demo、demo1都会调用action是demo的api实现
methods: {
    demo: function (obj) {
        // boxjs.demo 这个demo部分对应的就是scheme的action name,也就是hostMethodDescriptions里面的name字段
        return boxjs.demo({
            data: obj.data || {},
            cb: createCb(obj)
        });
    },
    demo1: function (obj) {
        return boxjs.demo({
            data: obj.data || {},
            cb: createCb(obj)
        });
    }
}

在工具模拟器扩展中添加 api 的实现

  • 打开 demo/program/simulator-extensions/api/master.js 文件,这个是 api 能力的 native 实现部分。

    todo api没有实现schememap,这个还做不了,实现方式待确认。。。

  • 修改 schemeHandlers 部分的代码,添加demo方法的实现,也就是 extensionJs

    // schemeHandlers 的 key 取值是对应 api scheme 的 action 部分
    schemeHandlers: {
        demo: context => async ({query: {params: {data, cb}}}) => {
            context.utils.execute(cb, 0, 'success', data);
        }
    }