联想桌面助手接入攻略

产品接入文档

1.产品介绍

1.1 产品功能介绍

  联想桌面助手,是针对Windows用户的桌面开放平台产品,该产品致力于为用户提供更便捷、更高效的PC服务,同时为开发者提供有效触达用户的方式。

  官方下载体验地址:  联想电脑_电脑管家_弹窗拦截_杀毒软件_垃圾清理__一键驱动管理__联想官方客服__联想电脑管家官网_-

  • 组件展示

1)桌面组件默认展示在桌面右侧区域,支持展开/收起,默认为展开态;

2)组件支持拖拽位置、调整排序,增删组件;

3)组件左键单击可以支持调起浏览器/客户端(已安装);

注意:当前的跳转(浏览器/客户端)均不支持直接跳转至单纯引导下载客户端的官网/直接下载客户端,此跳转需要承接组件必要的产品功能延展;

  • 组件编辑

组件右键支持“个性化编辑”,该编辑态支持产品的核心交互,由于位置有限,需秉持简洁克制的设计理念

  • 组件库(展示态)

1)组件上架至组件库内,支持在组件库内任意选择组件,并添加至组件展示区;

2)组件支持选择尺寸小/中/大;

  • 组件库2(针对强客户端依赖型产品)

1)针对强客户端依赖产品:支持预先引导安装客户端,安装成功后方可正常添加组件至展示区;

2)选择该方案的组件方,需要确保客户端支持静默安装;

注意:选择该方案的组件方要保障后续客户端升级发版需要兼容小组件;

1.2 产品接入流程

1)商务接洽请发邮件至:guanjiafuwu@lenovo.com

2)邮件标题:接入桌面助手平台_****(组件名称)_开发者名称 _联系方式

3)邮件内容:

  • 组件服务功能详述
  • 产品原型/demo

4)以下内容需如实填写:

内容详细要求示例
组件名称根据组件提供的服务,提供组件名称名称长度不超过6个字符单地天气
组件副标题简明扼要说明组件提供的服务描述长度不超过18个字符查看某地的天气状况
是否需要断网展示组件是否支持断网状态下继续使用单地天气--不支持
是否需要预先下载组件是否需要预先下载安装完成,才可以使用部分组件需要引导用户先进行安装,再使用单地天气--不需要
组件尺寸组件支持大中小,三种尺寸三种尺寸,可以任选其一,也可以都支持单地天气--支持大、中、小三种尺寸
组件默认展示尺寸组件在组件库需要有默认展示尺寸单地天气--默认展示小尺寸
是否存在跳出调起浏览器组件是否支持点击跳转,打开浏览器页面进行更多操作需提供跳转的url 注意:此处不允许直接跳转至下载客户端引流页面单地天气--支持跳转 https://weather.lenovo.com.cn/
是否包含收费服务用户使用过程中,是否存在收费服务单地天气--否
是否需要强制安装客户端用户需要提前安装客户端,才可以使用组件服务请谨慎选择此选项,可能造成用户添加意愿降低的可能性,建议强依赖客户端的产品选择单地天气--否

设计接入文档

1. 设计规范概述  

1.1 桌面布局

小组件在电脑桌面右侧优雅的展示,用户可以非常方便的将小组件添加至桌面。并且用户可以根据自己的使用习惯和喜好,对小组件进行自定义排序。

1.2 设计原则

若要创建出色的小组件,在产品定义和设计小组件时,需要遵守以下原则:

> 简单明了

用户可以快速查看信息,最大限度发挥小组件的价值。若用户想要了解更丰富的细节信息或更深入的交互,只需单击该小组件即可。

> 聚焦内容

提供此组件最核心的功能信息,通常应专注与一个主要任务或场景。

> 保持新鲜

组件的展示信息需要不断的更新,若一层不变则无法吸引用户的注意和长久使用的兴趣。

> 注意内容与组件大小的关系

创建或切换不同组件时候,不应只是简单的放大缩小,而应在大组件时考虑展示更多内容,小组件需要精简概括。

2. 组件设计规范

2.1 设计尺寸

联想桌面助手小组件支持1*1、1*2、2*2三种尺寸,分为小、中、大三种规格。开发者可以根据小组件信息和所需展示的功能,选择合适的尺寸进行设计。
1*1 小组件:150*150px(宽*高)
2*1 中组件:320*150px (宽*高)
2*2 大组件:320*320px (宽*高)

举例:「单地天气 」小组件

2.2 适配尺寸

因小组件采用的是自适应布局,在不同分辨率的设备屏幕下,小组件的显示尺寸会相应变化。
我们列出了在不同设备屏幕上实际显示的尺寸,供设计师参考。(无需单独输出设计方案,设计和验收时注意不同分辨率下显示是否正常即可)

举例:分辨率为1366*768,系统推荐显示100%的场景下,小组件缩放比例为100%

举例:分辨率为1920*1080,系统推荐显示150%的场景下,小组件缩放比例为125%

2.3 内容区域

各尺寸组件的内容必须保证在以下红色区域内,即小尺寸:118*130px,中尺寸:280*130px,大尺寸:288*300px。
此区域为最大边界值,若内容较少时,则在红色区域内居中显示,设计者需始终保证版面布局平衡,视觉美观。

举例:「搜索框」和「同花顺股票」中组件,内容不同边距不同

2.4 圆角

各尺寸组件的圆角半径均为12px的平滑圆角。

2.5 投影

各尺寸组件的均采用统一的投影高度。
颜色:#000000 14%;透明度;X:0;Y:2;模糊:21

2.6 文字

2.6.1 字体

为了视觉上的美观及统一,中文、英文和数字均采用 — 微软雅黑

2.6.2 字重

组件可使用的字重为Regular和Bold。
当标题类字号超过16px时,建议使用Bold字重,正文和辅助文字建议使用Regular字重,通过字重突出层级关系,让信息更清晰。设计者需根据实际内容进行字重选择。

2.6.3 字号

字号大小决定了信息的层级和主次关系,通过合理有序的字号设计,让组件信息清晰易读、层次分明。

以下表格为示例,不做具体的字号规定,设计者需根据实际组件的信息内容,进行字号和字重选择。

2.6.4 字色

通过字体的颜色变化,来增强组件的视觉层级。

2.7 颜色

联想桌面助手的小组件支持多种色彩,色彩应该可以作为提升整个小组件视觉属性的一种重要手段,但是它一定不能喧宾夺主,影响内容本身。
我们列出了常用的底板色彩,为渐变色上深下浅的垂直渐变,供参考。设计师也可根据产品调性进行调整,需始终保持色彩过渡自然,避免出现饱和度过高或过低的色彩,与整体融合协调。

选择背景色、图像和内容时,需遵循WCAG 2.1 无障碍指南,确保有足够的颜色对比度,以确保可读性和可访问性。
AA级别中正常文本的对比度要符合4.5:1,大文本(18px以上)的对比度要符合至少3:1;AAA级别中正常文本的对比度要达到4.5:1,大文本对比度要符合至少7:1。

举例:现有组件配色和样式参考

2.8 布局样式

不同尺寸的组件有不同的布局样式,但是内容在容器内至少要保留20%的空白空间,利于阅读。

3. 组件库设计规范

3.1 打开方式

组件库是所有小组件的聚合,可以快速浏览组件的卡片样式、切换展示的尺寸、添加或删除桌面组件等操作。

支持两种打开组件库的方式:

当用户需要添加小部件时,可以很方便的从桌面小组件中,找到组件库的入口。
1) 鼠标右键,选择“整理全部组件”,可进入组件库

2) 点击“+”icon,可进入组件库

3.2 交互行为

进入组件库后,点击小组件左上角的“+”按钮,即可在右侧区域添加预览;切换“小、中、大”button后,可进行展示大小的实时调整;

点击小组件的“一”按钮,即可删除预览。最后点击“完成”button,或空白区域,即可退回桌面。

3.3 缩略图提交规范

需提供该组件各尺寸规格的缩略图,SVG格式,不加投影,圆角度数12,以便预览展示。
小组件缩略图:150*150px(宽*高)
中组件缩略图:256*120px (宽*高)
大组件缩略图:150*150px(宽*高)

4. 右键编辑规范

4.1 打开方式

右键选择编辑此组件,卡片翻转,显示编辑框,此编辑框尺寸固定为320*320px。
卡片翻转的动画效果请与线上保持一致。

4.2 交互行为

右键编辑状态下,请不要使用复杂交互的方式和过深的操作路径,尽量保持操作的简洁性。
注意:内容不可超出框体。

技术接入规范

1.客户端框架简介

1.1 加载流程

  • 桌面助手主程序(Browser进程)负责加载主框架H5
  • 主框架H5通过主框架的插件获取组件的H5列表,并加载所有的组件H5,
  • 主框架负责注入pcmjssdk
  • 主框架有自己的插件进程
  • 每个组件有自己的插件进程,不需要Native支持的组件没有插件进程(譬如天气组件)

1.2 相关技术

  • 使用CEF的框架,最新版本使用Chromium92内核(管家5.0.60之前的版本使用Chromium84内核)
  • 助手框架负责管理所有的显示模块,包括 模块加载、拖动、大小、右键、设置、管理等
  • 所有的C++插件都在独立的插件进程中里加载,和主框架进程隔离,使用IPC通讯

1.3 框架图

2 插件调用流程

  • 框架负责H5和插件的双向通信
  • 组件支持Native的能力,只能通过sdk的接口window.pcmjssdk.asyncSendIPCMessage 进行访问, 调用流程如下图
  • 支持组件的插件给H5发送通知, 通知的流程如下图(后半部分), C++的通知不支持返回值

3.组件目录结构

3.1 简介

管家的安装包会带一份默认的模块包,缓存目录如果不存在模块包,则使用默认的包覆盖

桌面助手框架的包结构和子模块目录结构一致

3.2 目录结构

桌面助手的缓存目录为:C:\ProgramData\Lenovo\devicecenter\extends

3.2.1 extends目录

modules目录为所有的所有的组件目录, 此目录受管家的保护模块保护

cefcache cef的缓存目录,由浏览器引擎生成

3.2.2 extends/modules

modules.json的描述参考文档:组件列表

desktopmainframe 桌面助手主框架

DesktopAssistant.exe 桌面助手的主程序

子目录下是每个模块的 $appid$

3.2.3 extends/ $appid$

config.ini 里面目前只有version这个字段,表示当前模块已经安装并且正在使用的版本

$version$目录:和config.ini 里的version对应,包含此版本里所有的资源模块,桌面助手会加载此版本下的模块

3.2.3.1 extends/ $appid$/$version$

module.json: 此版本的信息,具体参考组件列表

native: 此模块依赖的native插件,提供Native的能力。 包括插件依赖的相关库、exe、资源等

h5: 本地的H5界面,此目录下必须有index.html作为入口, 桌面助手的框架会加载此h5页面

previewimg: 此模块的预览图, 目前支持大中小三种图, 文件名固定为:small.svg, medium.svg,big.svg,要求必须是矢量图

4.组件列表

modules.json是缓存的组件列表,服务器请求成功后会更新此列表

4.1根节点字段

字段名称类型描述
version字符串版本号的规则,譬如:1.0。 后续备用,
preview_img预览图的地址譬如:https://ldc-fast.lenovo.com.cn/desktopassist/modules/客户端根据此地址
按照规则拼出预览图的地址: $appid+$previeimgversion+previewimg+$图片名称
图片格式: SVG图片名称规则:小预览图:small.svg中预览图:medium.svg大预览图:big.svg

4.2 modules数组的字段:

字段名称类型描述
字段名称类型描述
app_id字符串模块的唯一标识
version字符串版本号
url字符串模块的H5地址,如果为空,则会尝试读取缓存目录下的h5/index.html
package字符串包的下载地址,暂定为zip格式
package_sha256字符串验证下载的包是否完整(必须小写)
support_sizeint此模块支持的大小, 位操作 1:小 2:中  4:大. 譬如:如果大中小都支持,这位1+2+4=7
default_sizeint默认的大小 必须是 1,2或者4, 否则认为无效
title字符串模块的标题
sub_title字符串模块的子标题
default_showint此模块是否默认显示,  0表示默认不显示,1 表示默认显示
support_editint此模块是否支持编辑, 默认为0, 0表示不支持, 1表示支持
extends字符串扩展字段,备用
orderint模块排序
force_updateint是否强制升级,默认为0,1表示强制升级, 0不强制升级
app_typeintapp的类型,默认为0。 此类型暂定为枚举类型,方便后续扩展

0 表示标准组件。1.20之前的版本只支持 0

1 表示必须依赖软件的安装程序 1.20之后的版本支持
install_infoobject安装程序的信息,如果app_type为0,忽略此字段

具体参考下面表格的install_info 描述
presetint默认为0, 是否为预置的组件,小红点依据此字段来显示
small_appobject小程序相关信息,如果没有此字段,则表示此组件不支持小程序
此字段只支持助手1.80及之后的版本

install_info 安装包信息

字段名称字段类型描述
min_version字符串本地安装需要的最小版本

譬如5.1 表示如果本地版本不小于5.1则不需要再安装,否则需要安装
guid字符串安装包的唯一标识的guid,注册表里的键值

譬如: {A9861883-31C5-4324-BD9A-DC9527EEB675}_is1是管家的注册表键值
package字符串安装包的下载地址
package_sha256字符串验证下载的包是否完整(必须小写)
package_cmdline字符串安装包的命令行参数
app_title字符串安装包显示的App标题
intervalint安装包下载安装大概需要的时间, 默认为20秒

small_app 小程序相关字段(字段如果没有设置,则走默认值)

字段名称字段类型默认值描述
url字符串h5/app/index.html小程序的H5地址,如果为空,则会尝试模块读取缓存目录下的h5/app/index.html
如果没有配置此字段,并且没有 h5/app/index.html 这个文件,则此组件不支持小程序的调用
icon字符串program.ico小程序运行的ICON图标,小程序运行时任务栏的图标
默认会从previewimg目录下读取
widthint400程序启动的宽度
heightint700程序启动的高度
resizeableint0是否支持Resize, 1表示支持 0表示不支持
此字段只有在联想电脑管家5.0.120及之后的版本才支持

5. 组件开发

  • 三方开发的组件需要遵守桌面助手的开发规范。
  • 组件开发至少需要一个组件显示的H5页面, H5支持本地和云端页面,云端页面在无网情况下会加载失败
  • 组件支持本地Native的能力,需要按照组件Native的规范开发C++的插件来支持

5.1 开发环境搭建

1)基础环境(可使用开发工具进行开发环境搭建),此工具支持:

  • 允许开发者编辑组件目录下的文件
  • 使用本地组件列表,临时禁用服务器列表的请求
  • 包含了两个示例的demo, H5组件 和 支持Native能力的组件

2)安装最新版本(5.0.50及以上)的联想电脑管家,管家里包含最新版本的桌面助手, 下载地址:联想电脑管家

3)运行开发者工具进行环境配置,配置完成后请重启桌面助手

组件目录为%ProgramData%\Lenovo\devicecenter\extends\modules, 以下用%DESKTOPASSISTMODULES%代替

5.2 线上H5组件

开发者工具中示例

%DESKTOPASSISTMODULES%\modules.json 里添加组件(如下),具体的字段描述参考4.2

{

          "app_id": "baidugushitong",

          "default_show": 1,

          "default_size": 2,

          "extends": "",

          "force_update": 0,

          "order": 1600,

          "package": "",

          "package_sha256": "",

          "sub_title": "股市信息",

          "support_edit": 1,

          "support_size": 7,

          "title": "股市信息",

          "url": "https://gushitong.baidu.com/",

          "version": "1.0"

      }

url填写H5页面的地址

如果组件是一个线上的H5组件,不依赖本地Native的插件, 此时重启桌面助手,就可以在组件库里添加并显示此组件。

5.3 本地H5&C++组件

开发者工具中,以demomodule为例

%DESKTOPASSISTMODULES%\modules.json 里添加组件(如下),具体的字段描述参考4.2

{

           "app_id": "demomodule",

           "default_show": 1,

           "default_size": 2,

           "extends": "",

           "force_update": 0,

           "order": 1600,

           "package": "",

           "package_sha256": "",

           "sub_title": "demomodule",

           "support_edit": 1,

           "support_size": 7,

           "title": "demomodule",

           "url": "",

           "version": "1.0"

 }

demomodule.zip 解压后,放到%DESKTOPASSISTMODULES%\app_id目录下(app_id和上一步添加的app_id相同, 此例为demomodule),此目录结构说明:

config.ini 配置当前组件的版本,目录下有此版本号的目录来存放相关的组件文件, 内容为

[config]

version=1.0 # 1.0和上一步添加的version信息相同

1.0/module.json 为当前版本的组件配置(必须和上一步添加的信息一致)

1.0/previewimg 里面存放组件库里显示的预览图,格式固定为svg,(小组件缩略图名称:small.svg, 中组件缩略图名称:medium.svg, 大组件缩略图名称:big.svg)

1.0/h5 本地的h5页面,如果目录里有index.html,则识别此组件为本地H5页面,否则会使用url的配置显示线上的H5(如果url也为空,则识别为无效组件,组件库不显示)。H5开发参考:桌面助手H5开发 - PC软件产品 - XPaas Confluence (lenovo.com)

1.0/native 放置native的插件和插件依赖的模块

可以以demomodule为参考,扩展业务组件的开发

重启启动桌面助手,就可以在组件库里添加并显示此组件

5.4 线上H5&C++组件

和本地H5&C++组件开发流程一致, 只需要要url设置为线上的H5就可以

需要保证1.0/h5目录里没有index.html (否则会识别为本地的H5来显示)

5.5 插件发布

开发者平台在开发中,目前由人工处理

将modules\$appid\$version\目录下文件全部打包成zip文件,上传至人工处理

譬如:打包的zip里的内容如下:

6. 组件H5开发

针对小组件H5开发,桌面助手框架提供了一些交互上的能力

页面目前支持三种大小,大小由框架来设置, 建议组件的H5实现自适应大小(譬如使用媒体查询)

H5的sample可以参考demomodule的H5代码

  • 组件大小、是否支持编辑由组件的配置来支持
  • 组件的拖动由框架来支持
  • 组件的编辑只支持大尺寸的显示,尺寸由框架来控制

6.1 pcmjssdk

桌面助手框架会注入页面jssdk, 实现了H5和C++双向通讯的能力

window.pcmjssdk提供以下方法:

接口名称描述备注实例:
registerNativeNotify注册插件的通知第一个参数是需要注册通知的模块,譬如:NEWPLUGIN_HELLOWORLDPLUGIN_ 表示注册HelloWorld插件的通知
第二个参数为接受通知的回调函数
window.pcmjssdk.registerNativeNotify('NEWPLUGIN_HELLOWORLDPLUGIN_',(category,content)=>{console.log('notify:',category)});
asyncSendIPCMessage异步调用插件的接口此接口会在Browser进程里加载IPC通讯的插件,并启动子进程来加载指定的插件
category:插件方法名, category 的规则需要以NEWPLUGIN_+插件库的文件名开头,下划线隔开 譬如:NEWPLUGIN_PLUGINDEMO_ADD
messageboday: 插件的方法参数
pluginName插件的名称, :默认为空.。 如果不为空插件名称优先使用此
className: IPC通讯的唯一标识, 默认为空。 为空的情况会使用插件名称作为唯一标识
remoteModule:IPC通讯进程的exe名称,默认为WSPluginHost.exe
window.pcmjssdk.asyncSendIPCMessage('NEWPLUGIN_HELLOWORLDPLUGIN_TESTNOTIFY', '1').then((e) => {
console.log('testIPCNotify2:', e)
})

6.2 框架接口

事件名称事件描述备注
window.onModuleEditFinish点击编辑完成需调用此事件编辑完成,子组件需要调用框架的onModuleEditFinish方法来通知框架
window.pcmjssdk.
reportBigdata.reportShowBigdata
上报大数据show类型action、label、params 均有数据需求人员定params 最多接受5个参数,
无参数可不传举例:window.pcmjssdk.reportBigdata
.reportClickBigdata('xxxx', 'xxx', [{'key': 'xxx', 'value': xxxx},{'key': 'xxx', 'value': xxxx}]);
window.pcmjssdk.
reportBigdata.reportClickBigdata
上报大数据click类型
window.pcmjssdk.
reportBigdata.reportReportBigdata
上报大数据report类型

6.3 window.open

框架会拦截此方法并上报相关的大数据,业务端可以调用此接口打开浏览器, 譬如:window.open('http:///www.baidu.com?s=1')

如果电脑安装了联想浏览器,则默认会使用联想浏览器打开,否则会使用默认浏览器打开

需要注意:使用浏览器打开指定的页面只能使用window.open,否则无法上报数据

6.4 页面接口

页面根据业务需要,实现相关的接口,来实现相关的业务功能

事件名称事件描述备注
window.onModuleEdit右键此组件,点击编辑,会触发此页面的函数举例:window.onModuleEdit = ()=>{ 组件内部逻辑处理 }
右键编辑,框架会调子组件的onModuleEdit方法来通知子组件
如果组件不支持编辑,可以不需要实现此接口
window.onModuleShow桌面助手显示会触发此事件
window.onModuleHide桌面助手隐藏会触发此事件
window.onModuleSetSize切换组件大小会触发此事件举例:window.onModuleSetSize = (evt) => { //size 1 小 2 中 4 大 console.log('onModuleSetSize:', evt, evt.size);}
window.onModuleActive桌面助手激活会触发此事件
window.onModuleDeactive桌面助手失去激活会触发此事件

6.5 扩展接口

根据业务的需要,框架会在升级的版本里提供一些扩展的接口

1. 获取模块信息:

可以通过jssdk的方法获取当前模块的一些信息

调用方法:window.pcmjssdk.getModuleInfo()

返回:{version:'1.0', appid:''appid, extends:"extends"}

可以通过返回值获取当前模块的appid和version等信息

sample:window.pcmjssdk.getModuleInfo().version  获取当前模块的版本

框架支持的版本:所有

2. 上报打开组件客户端的大数据

组件打开客户端,需要调用框架的接口来上报大数据

调用方法:window.parent.postMessage({ method: 'onOpenComponentClient',name: window.name }, '*')

框架支持的版本:1.20

6.6 组件拖动

框架会hook鼠标的点击消息来完成页面的拖动,组件可以根据业务的需要来禁用此拖动。 譬如在编辑页面、文本框输入页面、button等

此功能只在桌面助手框架1.20及以上的版本支持

1)控件添加样式disablecomponentdrag, 譬如<div class="disablecomponentdrag"></div>

框架会递归查找父组件的样式,如果有此样式,则禁用拖动

2)页面实现window.allowDragComponet, 返回false表示禁用。 框架在点击时调用此方法来决定是否拖动, 参数为鼠标点击MouseEvent

示例:

window.allowDragComponet = (evt) = > 
{
     return (evt.pageY < 40); 
}

6.7 组件编辑

  • 组件如果支持编辑,则样式需要实现统一的反转动画,编辑态组件的大小和大组件的大小一致
  • 页面需要实现window.onModuleEdit, 在此方法里实现反转动画和页面的切换
  • 编辑完成后,需要调用框架接口:window.onModuleEditFinish,做页面的切换

具体可以下载 5.3章节的demomodule.zip

代码示例:

html 代码
<div id="content">展示页</div>
<div id="setting">编辑页</div>

css代码
#setting {
  transform: rotateY(0deg);
}
.rotate {
  transition: 0.3s;
  transform: rotateY(90deg);
}
.rotates {
  transform: rotateY(90deg)!important;
}

js代码
// 反转动画dom
  var settingDom = document.querySelector('#setting');
  var contentDom = document.querySelector('#content');
  settingDom.className = 'rotates';
  // TODO 用户点击了'编辑此小组件'
  window.onModuleEdit = (evt) => {
    settingDom.style.transition = '0.3s';
    contentDom.className = 'rotate';
    setTimeout(() => {
      // TODO 因为rotate存在过度动画0.3s 所以给setting的行为也延迟0.3s
      settingDom.className = '';
    }, 300);
  };
  //调用设置完成的接口
  function finishEdit() {
    settingDom.className = 'rotates';
    setTimeout(() => {
      contentDom.className = '';
      contentDom.style.transition = '0.3s';
      setTimeout(() => {
        window.onModuleEditFinish(); // 关闭大窗口
        contentDom.style.removeProperty('transition');
      }, 300);
    }, 300);
  }

6.8 小程序相关的接口

助手1.80及以后的版本支持小程序相关的接口,jssdk增加了window.pcmjssdk.smallapp对象

在使用小程序相关的方法时,需要先判断此对象是否存在

譬如:

if (window.pcmjssdk.smallapp) { window.pcmjssdk.smallapp.asyncStart()}

接口名称接口描述备注
asyncStart启动组件的小程序组件的页面,可以在用户点击组件的时候调用
启动当前组件的小程序不需要传入参数,框架会负责加载组件对应的小程序页面
window.pcmjssdk.smallapp.asyncStart()
asyncStartWith带参数启动小程序助手1.130版本开始支持

使用前可以先判断window.pcmjssdk.smallapp&&window.pcmjssdk.smallapp.asyncStartWith
启动小程序的时候带上data参数, 小程序启动后可以使用此参数做业务逻辑
使用可以参考最新的小程序开发文档
asyncCheckIsRunning检测组件的小程序是否在运行例如:
var running = await window.pcmjssdk.smallapp.asyncCheckIsRunning();
if (running == "1") {console.log('is running')}else {console.log('not running')}
asyncNotify小程序和组件的通知在小程序的页面调用,会通知组件。 在组件里调用,会通知小程序
调用方法:window.pcmjssdk.smallapp.asyncNotify('notify data')
接收通知使用pcmjssdk注册回调的方法,注册的第一个参数为:FRAMEWORK_NOTIFY_DATA_FROM_SMARTAPP
例如:window.pcmjssdk.registerNativeNotify('FRAMEWORK_NOTIFY_DATA_FROM_SMARTAPP',
(category, content) => { var data = JSON.parse(content).data });

6.9 本地存储接口

助手1.100及以后的版本支持本地存储的接口,jssdk增加了window.pcmjssdk.localStorage对象

此接口的存储和组件相关,同一个组件和组件的小程序可以共享存储的数据

在使用此接口前,需要先判断此对象是否存在

if (window.pcmjssdk.localStorage) { ...}

接口名称接口描述备注
setItem存储数据暂时不支持存储大于100K的数据
window.pcmjssdk.localStorage.setItem('name','张三')
getItem获取存储的数据例如:
var name =  window.pcmjssdk.localStorage.getItem('name')

7. C++插件开发

可以参考HellowWorldPlugin.cpp, 实现了最基础的管家插件

C++插件必须使用MT(静态链接)的编译选项 (管家框架不会安装VC运行时)

插件只支持32位的

桌面助手的框架提供了H5和C++插件的双向通信, 调用的demo可以参考文档里的demo

71. 接口定义

接口名称描述注意事项
pcm_plugin_ininitialize插件的初始化
此接口会在H5第一次调用插件方法的时候执行
使用回调函数实现C++给H5发送通知
参考7.2
pcm_plugin_actionH5调用window.pcmjssdk.asyncSendIPCMessage 时框架会调用此函数
response会返回给H5
参考7.2
pcm_plugin_buffer_allocate分配插件内存保持和demo一致就可以
pcm_plugin_buffer_free释放插件内存保持和demo一致就可以
fn_pcm_plugincallback回调函数定义回调不支持response,可忽略此参数

7.2 注意事项

  • pcm_plugin_action方法和fn_pcm_plugincallback 回调的的action为字符串, 字符串必须以NEWPLUGIN_$PLUGINNAME$开发, 其中$PLUGINNAME$表示插件的动态库文件名,譬如:NEWPLUGIN_HELLOWORLDPLUGIN_ADDONE
  • pcm_plugin_action所有的接口请求为同步调用,调用返回前会penning其他的接口请求, 建议长时间的操作在新的线程执行,并通过callback的方式通知到H5
  • pcm_plugin_action 的返回值为0时,表示成功, 非0都表示执行错误。 非0时, H5需要在promise的.catch 里做错误处理

7.3 示例代码

#include "stdafx.h"
#include <string>
#include <thread>

#ifdef __cplusplus
extern "C" {
#endif

using fn_pcm_plugincallback = int(*)(LPCSTR action, const char* content, _Out_ char** response);
fn_pcm_plugincallback g_callback = NULL;

__declspec(dllexport) char* pcm_plugin_buffer_allocate(int len)
{
	return new char[len];
}

__declspec(dllexport) void pcm_plugin_buffer_free(char* ptr)
{
	if (ptr)
	{
		delete[] ptr;
	}
}

__declspec(dllexport) int pcm_plugin_ininitialize(LPCSTR paramter, fn_pcm_plugincallback callback)
{
	g_callback = callback;
	return S_OK;
}

//返回值0 表示成功,其他作为错误码,都认为是失败
__declspec(dllexport) int pcm_plugin_action(LPCSTR action, LPCSTR paramter, char** response)
{
	//新插件的定义 必须以NEWPLUGIN_HELLOWORLDPLUGIN 开头
	std::string content;
	int result = S_OK;
	if (strcmp(action, "NEWPLUGIN_HELLOWORLDPLUGIN_HELLO") == 0)
	{
		content = "hello world";
	}
	else if (strcmp(action, "NEWPLUGIN_HELLOWORLDPLUGIN_ADDONE") == 0)
	{
		int ret = atoi(paramter);
		content = std::to_string(++ret);
	}
	else if (strcmp(action, "NEWPLUGIN_HELLOWORLDPLUGIN_ERROCODE") == 0)
	{
		result = 110;
		content = u8"未知异常";
	}
	else if (strcmp(action, "NEWPLUGIN_HELLOWORLDPLUGIN_TESTNOTIFY") == 0)
	{
		std::thread([]() {
			if (g_callback)
			{
				g_callback("NEWPLUGIN_HELLOWORLDPLUGIN_NOTIFYJS", "Hello Notify", NULL);
			}
		}).detach();
	}
	if (content.length() > 0)
	{
		auto lenght = content.length() + 1;
		//这个分配的内存,会有调用方调用pcm_plugin_buffer_free 进行释放
		*response = new char[lenght];
		memcpy_s(*response, lenght, content.c_str(), lenght);
	}
	return result;
}

#ifdef __cplusplus
}
#endif

7.4 windows客户端安装

由于业务调整,桌面助手新的组件暂时不再接入windows客户端的安装

如果联想软件商店没有上架,客户端安装流程请参考7.4.1

如果联想软件商店已经上架的软件,客户端安装流程请参考7.4.2

7.4.1 助手框架支持的安装流程

只有在助手1.20及以上框架才能够支持

此流程需要按照8.1的文档提供完整的材料

添加组件的流程图如下:

需要注意:

  1. 目前的安装程序只支持exe格式,提交的exe和提交的sha256必须匹配
  2. 提交新的安装包不能更新服务器上一个版本的包,否则可能会使部分用户因为sha256不匹配,导致安装失败
  3. 检测客户端是否安装是从注册表里找提交信息GUID, 注册表路径:SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\
  4. 如果提交的信息里有最小版本的要求,则GUID下必须有DisplayVersion, 框架会依赖此字段做版本比较
  5. 调用安装程序会依赖安装程序以及所有的子进程全部退出,才识别为安装结束,不建议静默安装的时候拉起常住的子进程
  6. 1.50之前的框架,默认是30分钟超时检测, 1.50及之后的版本在超时前,会每隔30秒做一次注册表检测,如果注册表匹配就识别为安装成功,不再等待子进程的退出
  7. 助手框架会监控软件的注册表(上述定义的注册表),注册表一旦移除,则识别为软件被卸载, 此组件会被自动移除

7.4.2 基于软件商店的客户端的安装流程

依赖联想软件商店的客户端安装能力,只有在助手1.60及以上框架才能够支持

此流程提供8.7.1到8.7.4的内容, 可以参考9.9的注意事项

软件商店客户端的上架流程:

注册流程:

个人开发者:https://open.lenovomm.com/developer/doc?id=1560519371051511809

企业开发者:https://open.lenovomm.com/developer/doc?id=1557313917878046722

创建应用(已包含下条):https://open.lenovomm.com/developer/doc?id=1557313917878046722

静默安装说明: https://open.lenovomm.com/developer/doc?code=silentInstall

若已注册并上传应用的开发者想新增静默安装功能,请通过更新应用的方式进行(应用内添加对应功能,并通过开放平台填写参数,或联系客服添加)

8.上线准备

目前暂时不支持开放平台直接后台提交,需要将相关的信息提交给管理人员 :guanjiafuwu@lenovo.com

8.1需要的材料

1.组件支持尺寸(大、中、小)和相关尺寸的图片,此图片必须是svg格式的矢量图,保证在各种DPI下显示的效果

2. 默认显示的尺寸,大中小选择一个

3.是否支持编辑

4.组件标题(在组件库里显示)

5.组件描述(在组件库里显示)

6.组件包的zip文件(如果是线上的H5组件并且不依赖C++的插件,则不需要提供)

   1.格式必须是zip格式,不能够加密

   2.zip包根目录的内容包括 native和h5目录 (根据组件需求,两个目录至少有一个),具体可以参考 demomodule.zip

   3.zip包里不需要previewimg和module.json,用户添加组件的时候会自动生成

   4.native目录下如果有C++的插件,在上生产环境之前会做安全扫描并签联想的数字签名,否则只能使用开发者工具才能够加载

7.如果此组件需要在电脑上安装软件才能使用,需要提供

   1.安装包的下载地址,目前只支持exe的安装包(建议部署到CDN上, 一旦发布不允许再替换包)

   2.安装包的哈希256值

   3.安装包在注册表的里的GUID(譬如:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall下的key定义)

   4.静默安装的命令行参数(要求必须支持静默安装)

   5.此软件至少支持的版本(上面注册表下的DisplayVersion),框架会根据此版本对比来决定是否下载安装新的包

   6.安装包的标题 (在需要安装客户端的时候,显示给用户的标题)

   7.安装包下载安装大概需要的时间(秒),组件安装的进度条会依赖此时间

9 注意事项

1.组件使用线上的H5或者本地的H5,至少需要支持一种模式

2.每次更新组件包,都需要重新提交上线申请

3.线上的H5,不能禁用X-Frame-Options

4.H5的组件,图片建议使用svg矢量图,避免出现不同DPI下图片显示模糊的问题

5.组件H5页面禁止使用长期持续的动画(譬如CSS3、svga、svg等),避免较高的CPU功耗占用

6.线上的H5页面建议禁用cache, 否则需要处理断网情况下,页面缓存加载成功情况下的用户体验

7.为了减少电脑功耗,助手在托盘状态(托盘显示,页面隐藏)时,会将非Browser进程的子进程都suspend (所有JS的行为都会被禁用)

8.H5的组件禁止使用WebAssembly

9.从助手的1.60开始支持软件商店的客户端安装。针对8.7,如果已经在软件商店上架,则不需要再提供8.7.1到8.7.4的内容(软件商店的安装包必须支持静默安装)

10.用户没有使用组件的情况下,禁止高CPU的占用,避免较高的功耗使用。组件可以依赖6.4页面激活的通知来处理相关的业务,避免空闲状态的高功耗占用

11. 桌面助手目前只支持win10及以后的系统

12.有C++插件或者本地H5的发布,需要打包成zip格式,打包的内容参考: 联想开放平台

原文地址https://open.lenovomm.com/developer/doc?id=1590256744668172289

联想开放平台地址:联想开放平台

联想开发者专属QQ客服(工作日9:30-18:00):联想开发平台首页右侧悬浮的在线客服聊天入口可直接会话,无需添加好友。也可搜索官方客服QQ号2881414004。

联想应用商店微信公众号:

  • 28
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值