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

黄舟
Libérer: 2017-09-12 11:38:56
original
3207 Les gens l'ont consulté

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'])
Copier après la connexion

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 }
Copier après la connexion


// 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()
      }
     })
    })
   })
  })
})
Copier après la connexion

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal