微信小程序消息订阅处理实践

微信小程序提供订阅消息功能,分为一次性订阅消息、长期订阅消息。长期订阅消息目前只针对民生、金融、教育等有线下服务场景的类目开放。这些只是大类,并不表示所包含的所有二级类目都能申请长期订阅消息,具体看官方文档。

另一个长期订阅消息就是:设备消息(不支持个人类型的小程序)。无论是一次性,还是长期,订阅过程基本一致。本文以设备消息为例说明。

主要流程是:用户首次打开小程序,在指定页面,点击指定界面元素,弹窗询问是否订阅消息。这个弹窗是调用微信相关订阅接口后,自动弹出的。在窗口可以选择:取消、允许(可加提醒)、拒绝。

“取消”:相对于订阅没有明确的态度。再点击订阅触发元素,会再弹窗。

“允许”:表示允许下发消息

“添加提醒”:表示收到消息时会有提醒(针对设备消息:横幅+震动+铃声)

“拒绝”:表示不接收消息

无论是“允许”还是“拒绝”都是明确的态度,微信可能不想你再打扰用户,再调用订阅接口,就不会弹窗了。要想改变态度,就只能引导用户,从小程序右上角的按钮进入设置菜单更改。

具体的分析如下:

1.首次进入小程序。进入右上角菜单,设置-》通知管理-》接收通知

此处“接收通知”的开关默认是开的。且无当前小程序的信息。这就是首次进入小程序的,订阅相关设置的状态。

2.在某个页面我们点击了一个按钮:“一键订阅”,前端调用微信订阅接口,弹窗等待用户意见。

订阅接口:uni.requestSubscribeDeviceMessage

注:截图非完整代码

当选择“取消”,表明用户没有明确态度,回调进入的是fail

选择“拒绝”,回调进入的也是fail

选择“允许”,回调进入的也是success (所以indexOf判断可以不要)

不同的选择返回值具体又是什么样的呢?

“取消”回调结果:errMsg:操作结果说明

“拒绝”回调结果:errMsg:操作结果说明,[xxxx]:"reject",表示该模板id对应订阅为拒绝

“允许”回调结果:需要说明的是,即使点击了“添加提醒”,接口的返回值也为“accept”(相对于getSetting方法返回值,可能是accept、acceptWithForcePush)

根据测试,选了“取消”后,再调用订阅接口,可以再次弹出询问窗口。选“允许”或“拒绝”后,再调用订阅接口,不再弹窗,直接返回上次回调结果,进入相对应的回调方法。

如上次是“拒绝”,再调用订阅接口,直接回调到fail方法。结果值与上次一样。符合“拒绝,不再询问”。“允许”也具有“不再询问”的特性。

如果用户误选了“拒绝”,如何处理呢?

3.调用订阅接口结束后,小程序设置菜单里的订阅设置是有变化的,是有联动的。具体如下:

首次使用小程序,调用订阅接口前,设置菜单里是比较干净,如前面截图。调用订阅接口后,设置菜单里订阅相关地方会有小程序的痕迹,订阅结果也会反映到这里。

图示1处就是小程序的名称,也即前面提到的订阅后(无论允许或拒绝)会在这留下痕迹。

而2处就是该小程序下的一个消息名称(对应一个消息模板),当然一个小程序可能有多个订阅消息(每次订阅最多3个)。右侧为订阅状态,点击后可以进行修改。

也可以理解为:设置菜单里,“接收通知”有了小程序的痕迹(小程序的消息标题),再调用订阅接口不再弹窗。

要修改订阅结果,就只能引导用户手动到设置菜单里修改。

另外,要恢复初始状态(要求出现订阅弹窗),就先删除小程序,再使用。

总结:订阅消息(此处指设备消息)要想下发成功,总的来说是受小程序自身设置控制的。首先设置中的【接收通知】作为总开关要是打开状态,其次,总开关下要有该小程序消息痕迹,且订阅状态是“接收”或“接收并提醒”。

在首次使小程序时,【接收通知】总开关是开的。用户的小程序设置菜单(接收通知)中还没有该小程序的痕迹,也就达不到上面说的第二个条件(即便总开关是开的)。要留下痕迹,就需要显示引导用户授权---弹出订阅窗口。只要用户进行了订阅操作(允许或拒绝)就能留下痕迹。

通知管理中有了小程序痕迹,后续的订阅权限申请将不再弹窗。再调用订阅接口,结果还是上次的。需要引导用户到设置菜单,进行手动更改。

前端调用订阅接口的作用:1.订阅权限的开通,即:允许接收模板消息;2:model_id和sn的绑定要告知微信平台。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1489477.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

RNN(一)——循环神经网络的实现

文章目录 一、循环神经网络RNN1.RNN是什么2.RNN的语言模型3.RNN的结构形式 二、完整代码三、代码解读1.参数return_sequences2.调参过程 一、循环神经网络RNN 1.RNN是什么 循环神经网络RNN主要体现在上下文对理解的重要性,他比传统的神经网络(传统的神…

04 卷积神经网络

目录 1. 基本概念 1.1 卷积神经网络 1.2 卷积 1.3 汇聚(池化) 2. CNN网络架构及参数学习 2.1 网络架构 2.2 参数学习 3. 典型的卷积神经网络 3.1 LeNet-5 3.2 AlexNet 3.3 Inception网络 3.4 残差网络 4. 其他卷积方式 1. 基本概念 1.1 …

ReentrantReadWriteLock详解

目录 ReentrantReadWriteLock详解1、ReentrantReadWriteLock简介2、ReentrantReadWriteLock类继承结构和类属性3、ReentrantReadWriteLock的读写锁原理分析4、ReentrantReadWriteLock.WriteLock类的核心方法详解非公平写锁的获取非公平写锁的释放公平写锁的获取公平写锁的释放 …

全网最最实用--模型高效推理:量化基础

文章目录 一、量化基础--计算机中数的表示1. 原码(Sign-Magnitude)2. 反码(Ones Complement)3. 补码(Twos Complement)4. 浮点数(Floating Point)a.常用的浮点数标准--IEEE 754(FP32…

ElasticSearch核心之DSL查询语句实战

什么是DSL? Elasticsearch提供丰富且灵活的查询语言叫做DSL查询(Query DSL),它允许你构建更加复杂、强大的查询。 DSL(Domain Specific Language特定领域语言)以JSON请求体的形式出现。目前常用的框架查询方法什么的底层都是构建DSL语句实现的,所以你必…

跨境电商独立站:Shopify/Wordpress/店匠选哪个?

在面对不断增加的平台运营压力时,不少跨境电商的商家逐渐将注意力转向建立自己的独立站。据《中国跨境出口电商发展报告(2022)》所示,中国拥有的独立站数量在2022年已接近20万个,这表明独立站已成为卖家拓展海外市场的…

IndentationError:unindent does not match any outer indentation level

IndentationError:unindent does not match any outer indentation level 目录 IndentationError:unindent does not match any outer indentation level 【常见模块错误】 【解决方案】 原因分析: 解决方法: 示例: 欢迎来到我的主页&am…

正则采集器——前端搭建

前端使用有名的饿了么管理后台,vue3版本vue3-element-admin,首先从gitee中克隆一个vue3-element-admin模板代码vue3-element-admin: Vue3 Element Admin开箱即用的中后台管理系统前端解决方案,然后在此基础上进行开发。 1、修改vite.config.…

matlab仿真 数字信号载波传输(下)

(内容源自详解MATLAB/SIMULINK 通信系统建模与仿真 刘学勇编著第七 章内容,有兴趣的读者请阅读原书) clear all M8; msg[1 4 3 0 7 5 2 6]; ts0.01; T1; %t0:ts:T; t0:ts:T-ts; %x0:ts:length(msg); x0:ts:length(msg)-ts; f…

使用Dumpbin工具查看C++二进制文件的位数、时间戳及dll库的依赖关系

目录 1、Dumpbin简介 2、使用Dumpbin查看二进制文件的位数与时间戳 3、使用Dumpbin查看二进制文件依赖的dll库 4、最后 C++软件异常排查从入门到精通系列教程(专栏文章列表,欢迎订阅,持续更新...)https://blog.csdn.net/chenlycly/article/details/125529931C/C++基础入…

几种数据库中保存树的常见存储结构

在数据库中存储树时,常见的存储结构有以下几种: 常见存储结构 邻接列表 每个节点都有一个指向其父节点(pid)的引用。这种方法简单直观,也是最容易理解和常用的,但在获取整棵树或子树时可能需要多次查询。 存储结构 一般表结构…

自动驾驶-机器人-slam-定位面经和面试知识系列05之常考公式推导(02)

这个博客系列会分为C STL-面经、常考公式推导和SLAM面经面试题等三个系列进行更新,基本涵盖了自己秋招历程被问过的面试内容(除了实习和学校项目相关的具体细节)。在知乎和牛客(牛客上某些文章上会附上内推码)也会同步…

Android APP 音视频(03)CameraX预览与MediaCodec编码

说明: 此CameraX预览和编码实操主要针对Android12.0系统。通过CameraX预览获取yuv格式数据,将yuv格式数据通过mediacodec编码输出H264码流(使用ffmpeg播放),存储到sd卡上。 1 CameraX 和 MediaCodec简介 1.1 CameraX…

【CN】Argo 持续集成和交付(一)

1.简介 Argo 英 [ˈɑ:ɡəu] 美 [ˈɑrˌɡo] Kubernetes 原生工具,用于运行工作流程、管理集群以及正确执行 GitOps。 Argo 于 2020 年 3 月 26 日被 CNCF 接受为孵化成熟度级别,然后于 2022 年 12 月 6 日转移到毕业成熟度级别。 argoproj.github.i…

基于Xejen框架实现的C# winform鼠标点击器、电脑按键自动点击器的软件开发及介绍

功能演示 文章开始之前,仍然是先来个视频,以便用户知道鼠标连点器的基本功能 软件主界面 多功能鼠标连点器 快速点击: 痕即鼠标点击器可以设定每秒点击次数,让您轻松应对高频点击需求。 切换时长,即每次动作之间的间…

0719_驱动3 printk使用方法

一、printk使用方法 1.应用层打印使用printf,内核层使用printk 2.如何查看内核层中printk如何使用 3.在内核空间执行grep "printk" * -nR 4.在内核空间执行vi -t KERN_INFO 5.printk有8中打印级别(0-7),打印级别用来过滤…

数据结构(Java):反射枚举Lambda表达式

目录 1、反射 1.1 反射的定义 1.2 反射机制的原理 1.3 反射相关类 1.4 Class类 1.4.1 相关方法 1.4.1.1 常用获得类相关的方法 ​编辑 1.4.1.2 常用获得类中属性相关的方法 1.4.1.3 获得类中构造器相关的方法 1.4.1.4 获得类中方法相关的方法 1.4.2 获取Class对象 1.…

linux进程——虚拟地址空间——重新认识进程!!!

前言: 本节内容就将进入linux进程里面的又一个大板块, 博主认为这个板块和PCB的板块是平级——两者独立;之前友友们可能认为进程分为PCB和代码与数据。 但是本节过后, 我们可以对进程重新定义——进程 (PCB&#xff0…

深入理解计算机系统 CSAPP 家庭作业11.8

回收子进程是书本537页的内容 在tiny.c文件加以下代码,记得重新编译哦 书中提到CGI是在动态内容中的,所以题目的意思应该是在动态内容里面回收 void handler1(int sig) {int olderrno errno;while (waitpid(-1,NULL,0)>0){Sio_puts("Handler reaped child\n");…

【秋招突围】2024届秋招笔试-OPPO笔试题-第一套-三语言题解(Java/Cpp/Python)

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新 OPPO 春秋招笔试题**汇总~ 👏 感谢大家的订阅➕ 和 喜欢💗 ✨ 笔试合集传送们 -> 🧷春秋招笔试合集 🎀 01.K小姐的快…