微信小程序分享朋友圈的探索

·  阅读 675
微信小程序分享朋友圈的探索

自从微信小程序支持了分享到朋友圈功能,业务方仿佛看到了朋友圈带来的巨大流量,一直有些跃跃欲试的心情,借着需求,便有了这次实现分享朋友圈的探索。

粗看实现分享朋友圈的onShareTimeline方法,似乎只是跟onShareAppMessage 一样,So Easy,返回几个配置项即可,马上安排~。

2d14e33e7d87bda3424a861e9eb2f2b5.jpg

然而按照微信的惯例,幸福不会来得太突然,功能是支持了,但是要守规矩(千奇百怪的),除了是一个Beta版,不支持IOS,最大的限制就是单页模式了,如图:

image.png

从朋友圈点击分享的内容时,并未真正进入小程序,而是先进入一个单页模式,单页模式下有诸多的限制,影响比较大的是不支持wx.login。不过如果分享的页面只是静态内容、或者不依赖wx.login做一些自动登录等相关操作,那么问题就不大了,本文记录的是拿不到code时的一些解决方案。

一些解决办法

1. 中转页

首先借鉴官方给出判断单页模式的办法,如图:

image.png

const { scene } = wx.getLaunchOptionsSync()

if(scene === 1154) {
 // 单页模式适配逻辑
}
复制代码

判断当前为单页模式时,切换到一个静态的中转页(组件)即可。然而这可能不是客户想要的,此时预览的是一个页面,前往小程序时又是一个页面,体验上还是有些糟糕的。

2. 接口改造,支持未登录下调用

既然数据接口依赖登录流程,那么能不能通过接口改造,实现未登录下调用,以保证单页模式下页面正常展示呢?答案是可以的,但我们看了下,至少有十几个接口需要改动,前后端都有不少的工作量,遂放弃了,并且有了办法3。

3. 特殊的code

虽然拿不到code,但能不能跟后端约定,在单页模式下传入一个特殊的code,模拟登录来适配原来的自动登录流程呢?

答案也是可以的,但也有不少需要注意的地方,首先code是假的,如果分享的页面在单页模式下仍然依赖code做一些操作,可能会产生错误。

其次,无论是模拟新用户登录成功,还是返回了一个体验账号来适配登录,都有可能造成一些业务流程上的错误,比较明显的是在数据统计上,所以需要慎重处理。

OK了吗?还有大坑

由于分享朋友圈是一个公测功能,微信随时可能做一些调整(即使是稳定版,依然会变动😥)。国庆节前测试发现,在安卓手机下点击分享内容时,会先进入单页模式,放个假回来后发现单页模式没有了,暂不确定是不是所有安卓机型都取消了单页模式,或许也跟微信版本相关。

此时scene依然返回了1154,官方文档里scene === 1154判断单页模式的方式也就失效了,如果此前用上面的三个办法之一上线了,那么一个严重级别的bug就产生了。

或许暂时可行的判断

测试发现单页模式下getLaunchOptionsSyncmode会返回singlePage,但此字段并未在官方文档中声明,仍然是很不靠谱的;或者scene === 1154且为IOS时才判断为单页模式,这个办法也不比mode可靠;又或者结合单页模式禁用能力这一特性来判断...

const { scene, mode } = wx.getLaunchOptionsSync()

// mode === 'singlePage' OR scene === 1154 && isIOS
复制代码

由此可见,一个比较成熟且业务较复杂的小程序要上线分享朋友圈功能,风险还是比较大的。如果哪位前端小伙伴有更靠谱的解决方法,还望告知下。

分类:
前端
分类:
前端