Proceso de mensajes de suscripción al subprograma WeChat

Prefacio:

Cada vez que me suscribo a un mensaje, lo pego y lo copio en línea. A veces funciona, a veces no funciona y es posible que no pueda activarse. Encontré muchos fenómenos extraños, así que me tomé un tiempo para resuélvelo, solo como referencia.

Características/Proceso:

【método】

wx.getConfiguración,

con suscripciones: verdadero, 

res.subscriptionsSetting.mainSwitch,

res.subscriptionsSetting.itemSettings,

wx.showModal,

wx.openConfiguración,

wx.requestSuscribirMensaje

【Objetivo】

Obtener estado de autorización

【proceso】

Estado 1: el interruptor principal está encendido; los mensajes de plantilla están autorizados; todos los mensajes de plantilla están autorizados (uno de los métodos anteriores pasará, por lo que se juzga atravesando la identificación de la plantilla)

Estado 2: El interruptor principal está encendido - mensajes de plantilla autorizados - hay mensajes de plantilla no autorizados (uno de los métodos anteriores pasará, por lo que se juzga atravesando la identificación de la plantilla)

Estado 3 El interruptor principal está encendido: mensaje de plantilla no autorizada

Estado 4: El interruptor principal está cerrado

Estado 1_1 -> Siguiente paso (por ejemplo, enviar pedido)

Estado 2_1 -> Solicitar ventana emergente de confirmación secundaria (se detecta que no se ha abierto un mensaje de suscripción, ¿quieres ir a configuración?)

Estado 3_1 -> Ventana emergente Evocar autorización (wx.requestSubscribeMessage)

Estado 4_1 -> Solicitar ventana emergente de confirmación secundaria (se detecta que no ha activado el mensaje de suscripción, ¿desea ir a configuración?)

Estado 2_1_1 -> Cancelar Ir a -> Siguiente paso (por ejemplo, enviar pedido)

Estado 2_1_2 -> Aceptar -> Saltar a la página de configuración (abrirConfiguración)

Estado 3_1_1 -> Desmarcar la plantilla, si no se marca, la selección anterior siempre se mantendrá y solo se podrá cancelar.

Estado 3_1_2 -> Desmarque la plantilla, márquela para mantener siempre la selección anterior y solo puede cancelarla

Estado 3_1_3 -> Marque una determinada plantilla en la plantilla. Si no está marcada, la selección anterior siempre se mantendrá. Cancelar

Estado 3_1_4 -> Marque una determinada plantilla en la plantilla. Si no está marcada, la selección anterior siempre se mantendrá. Permitir

Estado 3_1_5 -> Marque una determinada plantilla en la plantilla, marque Mantener siempre la selección anterior, Cancelar

Estado 3_1_6 -> Marque una determinada plantilla en la plantilla, marque Mantener siempre la selección anterior, permita

Estado 3_1_7 -> Verificar todas las plantillas, desmarcar para mantener siempre la selección anterior, cancelar

Estado 3_1_8 -> Verificar todas las plantillas, desmarcar mantener siempre la selección anterior, permitir

Estado 3_1_9 -> Verificar todas las plantillas, marcar Mantener siempre la selección anterior, Cancelar

Estado 3_1_10 -> Verificar todas las plantillas, marcar Mantener siempre la selección anterior, permitir

Estado 4_1_1 -> Cancelar Ir a -> Siguiente paso (por ejemplo, enviar pedido)

Estado 4_1_2 -> Aceptar -> Saltar a la página de configuración (abrirConfiguración)

Estado 2_1_2_1 -> sin marcar/sin marcar -> después de la devolución -> siguiente paso (por ejemplo, enviar pedido)

Estado 2_1_2_2 -> Comprobado -> Después de la devolución -> Siguiente paso (por ejemplo, enviar pedido)

Estado 3_1_1_1 -> La plantilla no aparecerá en la configuración después de la cancelación -> Siguiente paso (como enviar un pedido)

Estado 3_1_2_1 -> Después de la cancelación, aparecerán plantillas en la configuración, las cuales no son aceptadas -> Siguiente paso (como enviar un pedido)

Estado 3_1_3_1 -> La plantilla no aparecerá en la configuración después de la cancelación -> Siguiente paso (como enviar un pedido)

Estado 3_1_4_1 -> Después del permiso, la plantilla no aparecerá en la configuración (queda por discutir si el permiso es efectivo en este momento) -> Siguiente paso (como enviar un pedido)

Estado 3_1_5_1 -> Después de la cancelación, aparecerán plantillas en la configuración, las cuales no son aceptadas -> Siguiente paso (como enviar un pedido)

Estado 3_1_6_1 -> Después del permiso, la plantilla aparecerá en la configuración. La marcada es el estado de recepción y la no marcada es el estado de no recepción -> Siguiente paso (como enviar un pedido)

Estado 3_1_7_1 -> La plantilla no aparecerá en la configuración después de la cancelación -> Siguiente paso (como enviar un pedido)

Estado 3_1_8_1 -> Después del permiso, la plantilla no aparecerá en la configuración -> Siguiente paso (como enviar un pedido)

Estado 3_1_9_1 -> Después de la cancelación, aparecerán plantillas en la configuración, las cuales no son aceptadas -> Siguiente paso (como enviar un pedido)

Estado 3_1_10_1 -> Después del permiso, la plantilla aparecerá en la configuración, todas están en estado de recepción -> Siguiente paso (como enviar un pedido)

Estado 4_1_2_1 -> Encienda el interruptor principal para recibir mensajes de suscripción

Estado 4_1_2_2 -> Desactivar el interruptor principal para recibir mensajes de suscripción

Estado 4_1_2_1_1 -> Después de regresar -> Solicitar una segunda ventana emergente de confirmación (se detecta que no se ha abierto un mensaje de suscripción, ¿quieres ir a configuración?)

Estado 4_1_2_2_1 -> Después de la devolución -> Siguiente paso (por ejemplo, enviar pedido)

Estado 4_1_2_1_1_1 -> Cancelar -> Siguiente paso (por ejemplo, enviar pedido)

Estado 4_1_2_1_1_2 -> Aceptar -> Estado 3_1

Resumir

Si la ventana emergente de autorización no está marcada, mantenga siempre el botón de selección anterior. No importa si selecciona o no una plantilla, cancela o permite, la plantilla no aparecerá en la configuración (si la plantilla está seleccionada y permitida es exitosa ? Desconocido)

Mantenga siempre el botón de selección anterior en la ventana emergente de autorización. Después de cancelar, no importa si selecciona todas las plantillas o una determinada, la plantilla aparecerá en la configuración y no se recibirá.

Mantenga siempre marcada la selección anterior en la ventana emergente de autorización. Después de permitir, la plantilla aparecerá en la configuración y se verificará el estado.

Después de numerosas operaciones, se confirmaron nuevamente fallas de configuración y autorización, y la situación básicamente se cerró.

Aviso

Si después de configurar el interruptor principal, regresar a la plantilla de detección sin autorización no puede evocar directamente la ventana emergente de autorización, debe usar la ventana emergente de confirmación secundaria para confirmarlo.

Captura de pantalla del proceso

 

interruptor principal

 

 

La plantilla no se abre/el botón Mantener siempre no está marcado ni cancelado.

 

Habilitar todas las plantillas/marcar Mantener y permitir siempre

 

La parte de la plantilla está activada/marcada Mantener siempre permitido

 

 

 

Ventana emergente de autorización

código completo

Los métodos están escritos por separado para facilitar la comprensión. La desventaja es que hay códigos repetitivos. Encapsúlelos y combínelos usted mismo.

El primer paso es thia.dingyue();

that.onSubmit(); es el siguiente método de envío

// 验证订阅状态
  dingyue(type){
    let that = this;
    wx.getSetting({
      withSubscriptions: true,
      success: function(res) {
        if (res.subscriptionsSetting.mainSwitch) {
          // 用户已开启总开关
          let itemSettings = res.subscriptionsSetting.itemSettings;
          if (itemSettings) {
            // 用户已授权模板消息
            let status = true; 
            //判断模板是否全部授权
            for(let i=0; i<tmplIds.length; i++){
              let key = tmplIds[i];
              if(itemSettings[key] != 'accept'){
                status = false;
                break;
              }
            }
            if(!status){
              that.weidingyue_muban();
            }else{
              that.onSubmit();
            }
          } else {
            // 用户未授权任何模板消息
            if(type == 'kaiguan'){ // 设置返回后提示是否授权模板
              that.onSettingNotSubscribeMessage();
              return;
            }
            that.openSubscribeMessage();
          }
        } else {
          // 用户未开启总开关
          if(type == 'kaiguan'){ // 设置返回后仍未开启进入下一步
            that.onSubmit();
            return;
          }
          that.weidingyue_kaiguan();
        }
      }
    });
  },

  // 未开启订阅 开关
  weidingyue_kaiguan(){
    let that = this;
    wx.showModal({
      title: '提示',
      content: '检测到您未开启订阅消息,是否前往设置?',
      success (res) {
        if (res.confirm) {
          that.openSetting('kaiguan');
        } else if (res.cancel) {
          that.onSubmit();
        }
      }
    })
  },

  // 未开启订阅 模板
  weidingyue_muban(){
    let that = this;
    wx.showModal({
      title: '提示',
      content: '检测到有订阅消息未开启,是否前往设置?',
      success (res) {
        if (res.confirm) {
          that.openSetting('muban');
        } else if (res.cancel) {
          that.onSubmit();
        }
      }
    })
  },

  // 打开设置
  openSetting(type){
    let that = this;
    wx.openSetting({
      success: function(res) {
        // 返回后流程
        if(type == 'muban'){
          that.onSubmit();
        } else if(type == 'kaiguan'){
          // 再次验证订阅状态
          that.dingyue('kaiguan');
        }
      },
      fail: function(err) {
        that.settingFail(type);
      }
    });
  },

  // 设置失败
  settingFail(type){
    let that = this;
    wx.showModal({
      title: '提示',
      content: '设置失败,是否重新设置?',
      success (res) {
        if (res.confirm) {
          that.openSetting(type);
        } else if (res.cancel) {
          that.onSubmit();
        }
      }
    })
  },

  // 设置开启总开关返回后,并未授权的情况(如果不加二次确认弹窗,无法直接唤起授权弹窗)
  onSettingNotSubscribeMessage(){
    let that = this;
    wx.showModal({
      title: '提示',
      content:'检测到有订阅消息未授权,是否授权?',
      success (res) {
        if (res.confirm) {
          that.openSubscribeMessage();
        } else if (res.cancel) {
          that.onSubmit();
        }
      }
    })
  },

  // 唤起授权订阅弹窗
  openSubscribeMessage(){
    let that = this;
    wx.requestSubscribeMessage({
      tmplIds,
      success(res) {
        that.onSubmit();
      },
      fail(err) {
        that.subscribeMessageFail();
      }
    })
  },

  // 授权失败
  subscribeMessageFail(){
    let that = this;
    wx.showModal({
      title: '提示',
      content:'授权失败,是否重新授权?',
      success (res) {
        if (res.confirm) {
          that.openSubscribeMessage();
        } else if (res.cancel) {
          that.onSubmit();
        }
      }
    })
  },

 

Supongo que te gusta

Origin blog.csdn.net/m0_61087678/article/details/132173717
Recomendado
Clasificación