小程序硬件框架(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

WMPF流程图

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

① 注册硬件。

② 调用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代码-远程调试:

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

相关新闻

QR code