FlutterWeb实战:05-与微信小程序交互
准备工作
在前面的文章《FlutterWeb实战:04-集成微信JS-SDK提供丰富体验》中,我们介绍了如何集成微信 JS-SDK,实现与微信 H5 交互。
调用小程序API
如果 H5 在微信小程序中打开,还可以调用 JSSDK 提供的小程序相关的 API。以下是可调用的API
1 | wx.miniProgram.navigateTo |
统一登录
一种常用的场景是将部分页面以 H5 形式内嵌到小程序的 Webview 提供次级页面服务。这里面涉及到账号打通的问题。
我们希望当用户在小程序中打开 Webview 页面,不需要登录、授权,就可以直接在 H5 中继续相应的操作。这里有一种方式,可以通过 设置 Cookie 来共享登录状态。
统一跳转接口
服务端提供一个API接口,或者称为一个URL地址,形如
https://xxx.com/app/redirect?accessToken={accessToken}&to={to}
这个接口接收两个参数,accessToken
代表用户的 Token,to
表示要跳转的页面地址(为确保正确解析,使用urlencode编码)。
假设我们使用 flutter 编写了一个订单页面,其路由为 /order/index
,那么这个页面的 URL 为 https://xxx.com/webapp/#/order/index
, 这里面我们使用二级目录托管 Flutter Web 页面,让他与 API 使用相同域名。
当用户在小程序中打开 Webivew 的页面,我们希望用户打开 https://xxx.com/webapp/#/order/index
页面,但为了保持登录状态,我们不直接打开这个页面,而是需要通过统一跳转接口中转,
也就是用户打开的是 https://xxx.com/app/redirect?accessToken={accessToken}&to=/webapp/#/order/index
,在这个接口中,服务端接收两个参数,并向客户端设置 Cookie,同时向客户端发起一个301临时重定向,
小程序的Webview在收到响应后,要自动进行跳转,最终也就跳转到了我们的目的页面,同时本地Cookie中保存的AccessToken,这样也就实现了登录状态共享。
服务端的代码类似如下实现:
1 | // 定义跳转接口 |
这里需要注意的是,接口域名必须和跳转页面的域名一致,否则无法共享 Cookie。