微信ウィジェット同期要求授権の詳細

2247 ワード

微信ウィジェット同期要求授権の詳細
需要分析:
1.ウィジェットが初めて開いたとき、ユーザーが1つずつ許可する複数の権限の取得を同時に要求する必要があります.

([‘scope.userInfo',‘scope.userLocation',‘scope.address',‘scope.record',‘scope.writePhotosAlbum']) 

問題の分析:
1. wx.authorizeインタフェースは同時に呼び出され、複数の権限が要求され、非同期の理由で授権要求が一括して発行され、明らかに要求に合致しない.
2.promiseは問題をうまく解決できるので、試してみましたが、次のコードは2つのファイルに分かれています.

// scope.js
import es6 from '../helpers/es6-promise'

//  
function getScope(scopeName) {
 return new es6.Promise(function (resolve, reject) {
  //  
  wx.getSetting({
   success(res) {
    if (!res.authSetting[scopeName]) {
     //  
     wx.authorize({
      scope: scopeName,
      success() {
       resolve(0)
      }, fail() {
       resolve(1)
      }
     })
    }
   }
  })
 })
}

module.exports = { getScope: getScope }


// index.js
import scope from "../../service/scope"
Page({
onShow() {
  let list = ["scope.userInfo", "scope.userLocation", "scope.address", "scope.record"];
  //  
  let num = 0;
  //  1: ?
  scope.getScope(list[0]).then(function (res) {
   num += res;
   scope.getScope(list[1]).then(function (res) {
    num += res;
    scope.getScope(list[2]).then(function (res) {
     num += res;
     scope.getScope(list[3]).then(function (res) {
      num += res;
      //  
      if (num) {
       wx.openSetting({
        success(res) {
         //  
         if (res.authSetting["scope.userInfo"])
          userService.login()
        }
       })
      } else {
       userService.login()
      }
     })
    })
   })
  })
})

解析:
1.コードの問題1書き方が不器用すぎるが、書き方をループで呼び出してみても、コールバックの問題をどう処理するか分からない.
2.wx.authorizeインタフェース、successパラメータは公式に(インタフェース呼び出し成功のコールバック関数)と解釈されていますが、実際にはインタフェース呼び出し成功であり、scopeが指定した権限を取得しています.
もし疑問があれば伝言を残してあるいは当駅のコミュニティに行って討論を交流して、読書に感謝して、みんなを助けることができることを望んで、みんなの当駅に対する支持に感謝します!