小程序硬件框架(WMPF)

一、产品概括

小程序硬件框架(Wechat Mini-Program Framework),简称WMPF,是一个运行环境,能让硬件在脱离微信客户端的环境下运行微信小程序,目前已支持安卓设备。

二、产品能力

WMPF上运行的微信小程序,与手机客户端的微信小程序能力一致。通过WMPF,开发者可以将微信平台能力赋能到硬件设备上,详情请见文末的《公测Beta版能力列表》。

三、产品优势

对于硬件开发者:

  • 开发成本低:开发者无需再投入高成本,对App作开发或维护更新,小程序可以联网更新,即更即用。
  • 内容生态丰富:微信小程序生态中有丰富的内容服务,硬件可以直接运行现网的小程序内容,为用户提供完善的服务。

对于小程序开发者:

  • 跨终端运行:仅需完成一次开发,即可实现小程序多端运行,适配成本低。
  • 拓展线下场景:小程序获得更多线下场景的流量,通过线下场景将用户引流至线上。

四、使用场景

WMPF小程序硬件框架,可以应用在各行各业的安卓系统平板电脑、大屏设备等硬件,提供低成本屏幕互动解决方案,可接入设备包括但不限于:

  • 智慧零售:收银机 / 排号机 / 商场导航屏 / 自动贩卖机 / 点餐平板 / 互动广告屏幕等…
  • 家用及娱乐设备:智能冰箱 / 儿童平板 / 跑步机 / 电视机 / KTV点唱机等…
  • 公共服务:医院挂号机 / 图书租赁设备 / 美术馆办卡机等…
  • 办公设备:教育平板 / 会议终端 / 会议投屏等…

五、接入申请

  • 第一步:注册账户 在 https://wecooper.weixin.qq.com 注册账户,请提前准备营业执照进行上传。

  • 第二步:体验产品 进入“微信小程序硬件框架-产品使用指引” 下载测试Demo,将Demo安装到安卓设备中,即可在你的硬件设备中体验WMPF能力。

  • 第三步:开通功能 若需正式使用,请点击“申请开通”,审核通过后即可绑定需正式在硬件运行的小程序。

  • 第四步:注册设备

只有通过平台鉴权的设备才可运行WMPF。

① 添加设备- 请在“首页-设备管理”中,添加希望上线小程序硬件框架的设备类型。

② 添加机型- 添加具体机型,“接入业务模块”项勾选“微信小程序硬件框架”。

③ 注册接口- 完成设备及机型添加后,需要在“首页-上传接口”中,配置AppID,注册后台接口并上传设备ID,查看如何注册deviceId接口

  • 第五步:开发实现 通过本文档以下的开发指引部分,实现LauncherAPP调用WMPF的能力。

  • 第六步:绑定小程序 完成开发后,需在“微信小程序硬件框架-小程序管理”页面输入移动应用AppID(即LauncherAPP的AppID),绑定该硬件设备要运行的小程序。查看如何绑定小程序

六、开发指引

第一步:在目标设备上运行小程序

根据“微信小程序硬件框架”内提供的APK 文件,开发者需将该 APK 安装到 Android 系统的设备中,安装成功后,硬件设备上会有应用「微信小程序硬件框架」(WMPF),该应用包含了小程序运行时需要的环境,并能响应启动小程序的请求。这个应用被称作WMPF Service。

商户需要编写发送请求的应用,这个应用被称作WMPF Client。

这两部分全部安装在同一部设备中,通过我们定义好的Task进行通信,一个Task可以理解为一个API,定义了某种服务,比如用于激活设备的IPCInvokerTask_ActivateDevice,用于启动小程序的IPCInvokerTask_LaunchWxaApp

要想运行小程序最少需要四个步骤

① 注册硬件。

② 调用IPCInvokerTask_ActivateDevice激活设备。

③ 调用IPCInvokerTask_Authorize登录。

④ 调用IPCInvokerTask_LaunchWxaApp启动小程序。

  1. 发送设备激活请求 IPCInvokerTask_ActivateDevice:

注:ProductId,keyVersion,deviceId和signature的获取流程和方式请 查看硬件注册流程,以此保证设备合法的前提下,未登录时也可运行小程序。

代码示例如下:

WMPFActivateDeviceRequest request = new WMPFActivateDeviceRequest()
request.baseRequest = WMPFBaseRequestHelper.checked()
request.productId = 1
request.keyVersion = 2
request.deviceId = "Your DEVICE ID"
request.signature = "Your SIGNATURE"
WMPFIPCInvoker.invokeAsync(
    request,
    IPCInvokerTask_ActivateDevice.class,
    new IPCInvokeCallback<WMPFActivateDeviceResponse>() {
        @Override
        public void onCallback(WMPFActivateDeviceResponse response) {
            // process result
        
    }
);
  1. 发送授权请求 IPCInvokerTask_AuthorizeNoLogin或者是IPCInvokerTask_Authorize:

注:DeviceTicket和Ticket的获取流程和方式见WMPF Client Demo的示例代码OpenSdkTestUtil.java

代码示例如下:

WMPFAuthorizeNoLoginRequest request = new WMPFAuthorizeNoLoginRequest()
request.baseRequest = WMPFBaseRequestHelper.checked()
request.ticket = "Your SDK Ticket"
request.appId = "Your AppId"
request.scope = "snsapi_userinfo,snsapi_runtime_apk"
WMPFIPCInvoker.invokeAsync(
    request,
    IPCInvokerTask_AuthorizeNoLogin.class,
    new IPCInvokeCallback<WMPFAuthorizeNoLoginResponse>() {
        @Override
        public void onCallback(WMPFAuthorizeNoLoginResponse response) {
            // process result
        }
    }
);
WMPFAuthorizeRequest request = WMPFAuthorizeRequest()
request.baseRequest = WMPFBaseRequestHelper.checked()
request.ticket = ticket
request.appId = appId // OpenSDK AppId for App
request.scope = "snsapi_userinfo,snsapi_runtime_apk"
WMPFIPCInvoker.invokeAsync(
    request,
    IPCInvokerTask_Authorize.class,
    new IPCInvokeCallback<WMPFAuthorizeResponse>() {
        @Override
        public void onCallback(WMPFAuthorizeResponse response) {
            // process result
        }
    }
);
  1. 发送启动小程序请求 IPCInvokerTask_LaunchWxaApp:

注:仅在仅在激活设备成功的前提下能调用成功

代码示例如下:

WMPFLaunchWxaAppRequest request = new WMPFLaunchWxaAppRequest()
request.baseRequest = WMPFBaseRequestHelper.checked()
request.appId = "Your AppId"
request.path = "Target Wxa Path"
request.isNoLogin = true

WMPFIPCInvoker.invokeAsync(
    request,
    IPCInvokerTask_LaunchWxaApp.class,
    new IPCInvokeCallback<WMPFLaunchWxaAppResponse>() {
        @Override
        public void onCallback(WMPFLaunchWxaAppResponse response) {
            // process result
        }
    }
);
  1. 当不需要运行小程序的时候,可发送取消授权请求: IPCInvokerTask_Deauthorize:

代码示例如下:

WMPFDeauthorizeRequest request = new WMPFDeauthorizeRequest()
request.baseRequest = WMPFBaseRequestHelper.checked()

WMPFIPCInvoker.invokeAsync(
    request,
    IPCInvokerTask_Deauthorize.class,
    new IPCInvokeCallback<WMPFDeauthorizeResponse>() {
        @Override
        public void onCallback(WMPFDeauthorizeResponse response) {
            // process result
        }
    }
);

为快速体验启动小程序的流程,可安装附件提供的示例DEMO,运行小程序。 但正式环境中,需要根据上述流程去编写发送请求的应用(可根据需要自定义启动小程序的交互与界面),具体实现见示例DEMO的代码。

第二步:在目标设备上运行小程序

  • API 在小程序硬件框架内与微信客户端内的输入输出一致,按照小程序文档中方式使用即可; 有部分 API 可能尚未支持,例如扫码/多线程,具体支持能力请查阅附录 《公测Beta版能力列表》
  • 开发工具与微信开发者工具相同。

第三步:在目标设备上运行小程序硬件设备上如何调试小程序

  • 安装微信开发者工具,打开项目或者是修改代码后,点击「预览」即可将本地代码上传到微信后台服务器,生成二维码。开发者在硬件设备的发送请求应用上,可通过IPCInvokerTask_LaunchWxaAppByQrCode的请求,来进行真机调试。
  • 具体实现可参考示例DEMO代码-远程调试:

点击查看更多详细开发指引

七、联系方式

我们诚邀广大开发者接入小程序硬件框架项目,更多最新动态,欢迎关注以下公众号查看:

更多合作资讯,请联系 wecooper@tencent.com

八、微信小程序硬件框架-公测Beta版能力列表

模块 类别 具体接口/组件 wmpf支持情况 备注
小程序接口 媒体类 视频播放(全屏/非全屏)、录制
音频播放、录制
图片读取、保存本地、本地上传
音频后台播放 (当前小程序未在前台运行)
文件读取、保存本地、本地上传
内嵌web-view网页 即将支持
小程序VoIP 即将支持
横屏中居中显示竖屏小程序 即将支持
调用本地设备存储的信息 通过本地接口
消息类 手机端弹出模板消息 (小程序一次性订阅)
手机端通过扫码进入客服消息 暂不支持ios手机扫码
消息push能力(无条件限制,但一个月内至少启动一次小程序) WMPF特有能力 样式由合作方自行规定
位置类 获取当前位置信息
查看地理位置
账户类 手机端扫码登录
手机端扫码分享给微信好友
一次扫码完成登录和支付 不支持
一次扫码完成app微信登录和框架登录态
获取手机号
获取地址信息
硬件类 蓝牙
获取系统信息
获取系统SN码 WMPF特有能力
获取网络状态
罗盘
WiFi
NFC 文档所示hce能力
打印机 WMPF特有能力
非标摄像头(定焦类、工业类) WMPF特有能力
WiFi扬声器tts WMPF特有能力
相机组件
支付类 有微信客户端时,拉起客户端支付
无微信客户端时,手机客户端扫码支付 WMPF特有能力 仅支持同uin
小程序内添加卡券和会员卡 通过手机扫码
3D人脸登录、支付 即将支持
运维类 调试接口
传输鉴权信息完成设备注册 WMPF特有能力
绑定同主体小程序 WMPF特有能力
合作方可决定小程序是否同步出现在手机端里 WMPF特有能力
监控数据上报 WMPF特有能力
CLI体验版开发包工具 WMPF特有能力
可配置禁用胶囊关闭按钮 WMPF特有能力
菜单项内容可配置(添加/删除) 即将支持
跳转类 小程序跳转小程序(无确认提示,不限次数) WMPF特有能力
小程序跳转app WMPF特有能力
生成带参小程序码(供手机端扫码跳转)
小程序菜单中提供回到首页和重启小程序按钮 WMPF特有能力
小程序退出时可通过接口监听 WMPF特有能力
小程序组件 视图容器
基础内容:icon、text等
表单组件:button、checkbox等
导航
媒体组件
地图
画布
小程序全屏显示(不显示系统导航栏)
小程序硬件框架 分包加载
预加载
小程序后台运行、后台管理(安卓系统)
热补丁验证
其他 体验版小程序
CLI体验版开发包工具
硬件运行情况跑分工具 即将支持