插件必须以类的方式给平台方暴露插件入口,平台在加载到插件之后,会立刻`new`一个插件实例,并传入一些必要的配置参数。
插件的入口类签名如下所示:
class PluginClass { constructor(config: PluginConfig) {} update?(props: PluginProp[]) {} destroy?() {} } |
构造器 - `constructor(config: PluginConfig) {}`
构造器函数必须要实现,以在这里实现插件的视图渲染。由平台方初始化插件时传入`config`参数,此配置参数说明如下表:
参数 | 描述 | 类型 |
---|---|---|
container | 插件容器,插件必须将插件内容动态渲染在此容器里,不能渲染在此容器外面,也不能随意渲染在平台方的文档任意地方 | HTMLDivElement |
token | 插件授权token,由插件平台前端向插件平台后端申请,然后传入插件前端,插件前端不管是向插件自己业务后端还是插件平台后端发起接口请求,都需要带上此token。此参数有可能为`null` | string | null |
assetPrefix | 插件静态资源前缀,也就是插件代码部署在平台方资源服务器上的绝对目录,插件可以使用这个参数去加载其他资源。建议参考`注意事项`中提到的`webpack自由变量`小节内容。 | string |
pluginInfo | 插件实例数据,即在兔展编辑器创建插件组件实例之后,编辑并保存的数据 | |
userInfo | 平台方在微信授权之后,将微信用户信息传入,当拒绝授权或者授权失败的时候,此参数为`null`或`undefined`,开发者需要考虑这种情况的容错处理,例如显示占位图 | WechatUserInfo | null |
updateWechatShareInfo | 更新微信分享配置,可以用在需要自定义微信分享的场景下,将会覆盖兔展平台默认的微信分享配置 | (patch: Partial<WechatShareData>) => void |
appendShareLinkParams | 追加微信分享链接参数,不覆盖图片平台默认的微信分享配置,但需要追加一些自定义链接参数,返回追加参数之后的完整分享链接。其中,参数`link`是原分享链接,一般直接传入`window.location.href`即可,参数`params`是要追加的参数对象 | (link: string, params: Record<string, any>) => string |
同步更新插件,当在兔展编辑器修改了插件的属性配置,可能需要同步插件的UI界面,那么就需要实现这个方法。由平台方传入`props`参数,即最新版的插件活动配置属性列表。
如果插件没有实现这个方法,那么平台方则忽略插件属性配置的同步操作。
插件被卸载后的清尾逻辑,例如清除事件绑定等逻辑。由平台方在卸载插件时调用,如果插件未实现此方法,那么平台方则忽略。
插件实例数据,是个对象,主要属性说明如下表:
属性 | 描述 | 类型 |
---|---|---|
id | 插件id,在兔展工作台定义插件时自动生成的唯一id。 注意:不是插件组件id,也不是插件活动id。 | string |
componentId | 插件组件id,在兔展编辑器作品中添加插件时,自动生成的唯一uuid,和插件活动一一关联,通过此id可以查询该插件活动的相关业务数据。 | string |
name | 插件英文名称,即插件入口类名,建议大驼峰式命名,为系统级唯一英文名称,不能重复命名。 | string |
version | 插件版本号,代表该插件活动在创建时所依赖的代码版本。每次上传新代码包时,会自动迭代插件版本号,不过不会影响已经实例化的插件活动依赖的版本号,只会影响基于此版本新建的插件活动。 | string |
props | 插件活动的相关配置属性列表,这些属性就是在编辑器配置的属性数据。这个参数有可能会传入`null`或`undefined`,请注意容错处理。 | PluginProp[] | null |
插件活动的配置属性数据,是个对象,主要属性说明如下表:
属性 | 描述 | 类型 |
---|---|---|
id | 属性id | string |
name | 属性英文名称,用于编程使用,开发者需要通过此英文名称提取活动配置,并实现相关的业务逻辑。插件内唯一,建议小驼峰式命名 | string |
moduleName | 模块名字,所属模块,主要用于编辑器中 | string |
type | 属性类型,主要用于编辑器中,定义该属性的录入类型,例如单行文本、多行文本、图片选择器等 | string |
title | 属性标签,主要用于编辑器中,描述该属性的显示标签 | string |
value | 普通属性值,在编辑器制作时存储的值 | string |
componentFlag | 是否是自定义组件,1是,0否 | number |
systemComponentFlag | 是否系统组件,1是,0否 | number |
componentValue | 组件值,如果是系统组件,根据系统组件定义的格式存储,如果是普通属性组件只存属性名 | any |
微信用户信息,参考微信文档,主要属性说明如下表:
属性 | 描述 | 类型 |
---|---|---|
openid | 用户的标识,对当前公众号唯一 | string |
unionid | UnionID | string |
nickname | 用户的昵称 | string |
headimgurl | 用户头像 | string |
sex | 用户的性别,值为1时是男性,值为2时是女性,值为0时是未知 | number |
province | 用户所在省份 | string |
country | 用户所在国家 | string |
city | 用户所在城市 | string |
language | 用户的语言,简体中文为zh_CN | string |
微信分享配置,是个对象,主要配置说明如下表:
属性 | 描述 | 类型 |
---|---|---|
title | 分享标题 | string |
desc | 分享描述 | string |
link | 分享链接 | string |
imgUrl | 分享封面图 | string |
onShare | 分享成功后的回调函数,回调函数参数是表示分享到哪里: - `timeline` 微信朋友圈 - `friend` 微信好友 - `workwechat` 企业微信 - `qq` QQ好友 - `qzone` QQ空间 | (type: string) => void |
onCancel | 分享失败的回调函数 | () => void |