关于微信小程序opensetting授权踩过的坑

时间点是2018年12月,写了一版小程序其中有两处授权的地方,一处是canvas绘图保存到手机,一处是微信健康获取步数。

因为微信健康需要提交form_id用于消息推送,点击事件是基于一个formtype为submit的button触发的,然后bug就来了,授权相关的代码大概是这个样子的(run_auth_deny会在onshow的时候根据getSetting的状态进行更新):


这里是onshow时检查授权状态

这里是点击后触发的函数

ios毫无问题,但是测试小姐姐的安卓机在拒绝了授权之后死活无法再次呼起授权,也就是代码段最上面的openSetting根本打不开。然后我就开始了各种测试。

先说说官方文档,为了避免无良开发者无脑调用openSetting接口,微信在9月份对openSetting接口的调用进行了调整(顺便吐槽一下官方还说可以在点击后的非手写promise异步回调或者模态框的成功回调内触发,然而这些都是不能兼容所有设备的,至少现在是不行的):

官方的意思是禁止了在类似onshow等生命周期函数里直接呼起openSetting,然后我测试了一下,确实直接wx.openSetting()没法进入设置页,但是在ios端这么写还是能在页面一加载就进入设置页的(测试小姐姐的安卓并不能进入~),嗯。。。那可真蠢。



看了这么多先说说解决方案吧,一些异常的兼容性放在最后再吐槽。目前我掌握的兼容写法是这样的:

wxml要这么写(其实就是放弃了form_id的搜集。。。),利用官方的第二种解决方案(如果想要用wx:if wx:else控制wxml显示/隐藏

你可能感兴趣的:(关于微信小程序opensetting授权踩过的坑)