위 챗 애플 릿 사용자 권한 수여 최 적 실천 지침

머리말
위 챗 애플 릿 을 개발 할 때 사용자 권한 을 가 져 오 는 페이지 를 자주 사용 합 니 다.예 를 들 어 로그 인 하려 면 개인 정 보 를 얻 고 얼굴 인식 을 하려 면 카메라 권한 을 가 져 야 합 니 다.위치 지도 기능 을 하려 면 사용자 의 위치 권한 을 가 져 야 합 니 다.그림 을 사용자 의 앨범 에 저장 하려 면 앨범 권한 을 가 져 야 합 니 다.
위 챗 의 scope 프로 세 스:

대부분의 기능 은 권한 이 부여 되 지 않 아 사용 할 수 없습니다.일반적으로 저 는 권한 을 열 었 는 지 확인 한 다음 에 열 었 으 면 계속 사용 합 니 다.열 리 지 않 으 면 계속 권한 을 요청 합 니 다.거절 할 경우 힌트 를 주 고 사용자 가 수 동 으로 설정 페이지 를 열 수 있 도록 합 니 다.
\#정상 논리
그러나 이 방법 을 쓰 면 아마 이 럴 것 이다.

wx.getSetting({
    success(res)=>{
        if (!res.authSetting['scope']) {
          console.log('   ')
              wx.authorize({
                scope: 'scope',
                success() {
                    console.log('    ')
                },
                fail() {
                    console.log('    ,       ')
                    wx.showModal({
                        title: '    ',
                        content: '   xxx  ',
                        showCancel: false,
                        success(res) {
                        if (res.confirm) {
                            console.log('      ')
                            wx.openSetting({
                                success(res) {
                                    console.log(res.authSetting)
                                    res.authSetting = {
                                    "scope.camera": true,
                                    }
                                }
                            })
                        } else if (res.cancel) {
                            console.log('      ')
                        }
                        }
                  })
                }
             })
        } else {
          console.log('   ')
        }
    },
    fail(err)=>{}
})
지금 1202 년 이 되 었 는데,이 방법 을 쓰 고 업무 논리 가 섞 여 있다 는 것 은 정말 끔찍 하 다.
저 는 참 을 수 없습니다.함 수 를 봉인 하 는 데 시간 이 좀 걸 렸 습 니 다.지정 한 권한 이름 만 들 어 오 면 사용자 가 권한 을 열 었 는 지 확인 할 수 있 습 니 다.열 리 지 않 으 면 알림 이 열 리 지 않 으 면 페이지 를 수 동 으로 열 수 있 습 니 다(어쨌든 열 어야 합 니 다).
코드 세 션 을 쓰 려 고 했 는데 도구 에서 openSetting 을 호출 할 때 문제 가 있어 서 포기 할 수 밖 에 없 었 습 니 다.
\#코드 디 테 일

// utils/auth.js

/**
 * @param {
 * authType:     
 * }
 */

module.exports = async function wxAuth(authType) {
  // scopeArr ref: https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/authorize.html
  let scopeArr = [
    "userInfo",
    "userLocation",
    "userLocationBackground",
    "address",
    "invoiceTitle",
    "invoice",
    "werun",
    "record",
    "writePhotosAlbum",
    "camera",
  ];
  if (scopeArr.indexOf(authType) == -1) {
    return console.error("          ");
  }
  let scope = "scope." + authType;
  let isUserSet = await getSettingSync(scope);
  if (isUserSet) return true;
  let isAuthorize = await authorizeSync(scope);
  if (isAuthorize) return true;
  let showModalMes = await showModalSync(scope);
  //        
  if (showModalMes) {
    //      
    let openSet = await openSettingSync(scope);
    if (openSet) {
      return true;
    } else {
      return false;
    }
  } else {
    //     
    return false;
  }
};

//            
function getSettingSync(scope) {
  return new Promise((resolve, reject) => {
    wx.getSetting({
      success(res) {
        if (!res.authSetting[scope]) {
          console.log("   ");
          resolve(false);
        } else {
          console.log("   ");
          resolve(true);
        }
      },
      fail(err) {
        reject();
        console.error("wx.getSetting Error", err);
      },
    });
  });
}
//       
function authorizeSync(scope) {
  return new Promise((resolve, reject) => {
    wx.authorize({
      scope: scope,
      success() {
        resolve(true);
        console.log("    ");
      },
      fail() {
        resolve(false);
        console.log("    ");
      },
    });
  });
}
//           
function showModalSync(scope) {
  return new Promise((resolve, reject) => {
    wx.showModal({
      title: "  ",
      content: `         ,     ${scope}   `,
      confirmText: "   ",
      showCancel: false,
      success(res) {
        if (res.confirm) {
          console.log("    ");
          resolve(true);
        } else if (res.cancel) {
          resolve(false);
        }
      },
      fail(err) {
        reject();
        console.error(err, "wx.showModal Error");
      },
    });
  });
}
//             ,           
function openSettingSync(scope) {
  return new Promise((resolve, reject) => {
    wx.openSetting({
      success(res) {
        console.log(res.authSetting);
        if (res.authSetting[scope]) {
          resolve(true);
        } else {
          resolve(false);
        }
      },
      fail(err) {
        reject();
        console.error(err, "wx.openSetting Error");
      },
    });
  });
}

\#사용
JS 코드 참조:

import auth from './../../utils/auth'
Page({
   data:{
     isCameraAuth: false
   },
   onLoad(){
         //     
    auth('camera').then(() => {
      console.log('    ')
      this.setData({
        isCameraAuth: true
      }
    }).catch((err) => {
      console.error('    ');
    })
   }
})
wxml 코드 참조:

<!-- index.wxml -->
<view>    :{{isCameraAuth}}</view>
<camera wx:if="{{isCameraAuth}}" style="width: 100%; height: 300px;"></camera>
\#미리 보기
이 를 위해 개발 도구 에서 미리 보 기 를 직접 열 수 있 는 데모데모 미리보기를 만 들 었 습 니 다.
총결산
위 챗 애플 릿 사용자 권한 수여 에 관 한 최고의 실천 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 위 챗 애플 릿 사용자 권한 수여 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 저 희 를 많이 지지 해 주세요!

좋은 웹페이지 즐겨찾기