微信sdk-wx.getSetting无法获取用户权限的问题

771 阅读2分钟

一、问题背景

当用户首次进入页面,进行录音时,会向用户询问录音授权。该录音权限的询问会在用户使用录音时询问而不能提前向用户询问。

image.png

二、问题复现

当用户首次进行录音时,用户已经点击了录音按钮,但是此时却出现了录音授权弹窗;该录音任务会被意外阻断而产生bug。

三、版本及环境

"weixin-js-sdk": "^1.6.0"

微信浏览器H5端

四、解决过程

  1. wx.getSetting

    按照微信官方文档,肯定是最先用这个api,查看用户是否已经授权过录音权限,但是这个api没用,拿不到拿不到拿不到拿不到拿不到,气死了!!!问了公司的大佬大家都反馈这个api有问题啊,拿不到!!

     wx.getSetting({
                     success(res) {
                         if (!res.authSetting["scope.record"]) {
                             wx.authorize({
                                 scope: "scope.record",
                                 success() {
                                     // 用户已经同意小程序使用录音功能,后续调用 wx.startRecord 接口不会弹窗询问
                                     console.log("录音授权成功");
                                 }
                             });
                         }
                     }
                 });
    

2.曲线救国

当用户已进入页面后就弹窗,用户点击确定后调用录音api。

wx.startRecord({
    success(res){  wx.stopRecord() },
    fail(res){ wx.stopRecord() },
    cancel(res){ wx.stopRecord() },
})

此时,当用户未授权录音时,就会弹出授权弹窗,如果已经授权过了就会立刻停止这段录音。通过这个方法判断出用户是否已经授权过权限,且记录用户的权限

此后,当用户发送语音点击录音按钮时,若用户没有权限则禁止发送语音;反之则能够发送。

五、总结

叭叭叭说了一大推,总结一下。就是wx-sdk中的wx.getSetting(),api拿不到用户授权过的权限;既然拿不到那我就直接调用(wx.startRecord()),调用完后自己记录时候有这个权限。

over。