Maison  >  Article  >  Applet WeChat  >  Exemple d'analyse de l'applet WeChat implémentant l'autorisation de demande synchrone

Exemple d'analyse de l'applet WeChat implémentant l'autorisation de demande synchrone

黄舟
黄舟original
2017-09-12 11:38:563197parcourir

Cet article présente principalement les informations pertinentes sur l'explication détaillée de la demande d'autorisation synchrone de l'applet WeChat Lorsque l'applet est ouverte pour la première fois, je dois demander plusieurs autorisations en même temps, et l'utilisateur en autorise une. par un. Pour répondre à cette exigence, il est nécessaire que les amis puissent se référer à ce qui suit

Explication détaillée de l'autorisation de demande de synchronisation de l'applet WeChat

Analyse des exigences :

1. Lorsque le mini programme est ouvert pour la première fois, je dois demander plusieurs autorisations en même temps, et l'utilisateur les autorise une par une.


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

Analyse du problème :

1 L'interface wx.authorize est appelée au niveau du En même temps, en cas de demandes d'autorisation multiples, pour des raisons asynchrones, les demandes d'autorisation sont émises ensemble, ce qui ne répond évidemment pas aux exigences.

2. Promise peut très bien résoudre le problème. Essayons-le. Le code suivant est divisé en deux fichiers.


// 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()
      }
     })
    })
   })
  })
})

Solution analytique :

1. Le problème 1 dans le code est écrit trop bêtement, mais j'essaie de l'appeler en boucle et je ne sais pas comment résoudre le problème de rappel.

Interface 2.wx.authorize, l'explication officielle du paramètre success est (fonction de rappel pour un appel d'interface réussi), mais ce n'est pas le cas. En fait, l'appel d'interface est réussi et le. l'autorisation spécifiée par la portée est obtenue

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn