【产品设计】微信小程序如何做好“授权”设计?

授权登录降低了用户注册账号时的操作成本,减少了产品的获客门槛。在本文中,作者结合案例,盘点了微信小程序授权登录设计中需要注意的几点问题,并对功能设计背后的设计思路与原理进行了简要的分析

在这里插入图片描述

01 openID

这是微信生态圈中,为了识别用户,每个小程序或者公众号对每个用户生成的一个唯一的ID,类似身份证号,针对该小程序或公众号具有唯一校验的属性。

储存openID,在用户下次进入小程序中,可识别用户身份,实现免登陆功能。小程序本身已经实现了登录功能,所以降低的开发成本。但获取openID只适用于规划中不含有app等其他平台应用的产品,如果想要实现多应用,在最初设计时,千万不要用openID!此处踩了大坑,后文中会详细介绍。

02 UnionID

如果开发者拥有多个移动应用、网站应用、和公众帐号(包括小程序),可通过 UnionID 来区分用户的唯一性,因为只要是同一个微信开放平台帐号下的移动应用、网站应用和公众帐号(包括小程序),用户的 UnionID 是唯一的。

换句话说,同一用户,对同一个微信开放平台下的不同应用,UnionID是相同的。注意:需要在微信开放平台将多个应用绑定在同一主体下,才能实现多应用共用一个UnionID,此配置需要前置进行。

03 其他用户信息

包括:用户信息、地理位置、定位、通讯地址、发票抬头、获取发票、运动步数。

04 微信绑定手机号

获取用户微信默认绑定的手机号,需要用户点击页面中的按钮(button),才可以调用此功能。弹窗里支持用户修改手机号。如果业务中需要使用手机号来注册,就可以使用此功能获取,如业务中不强制要求,则只需获取用户openID/UnionID,在必要环节获取手机号,以提升用户体验。
介绍完openID/UnionID两者的区别,总结一下如何获取这两种ID:

  • 点击页面中的按钮,弹出授权弹窗用户同意授权,才可获取。注意:用户的openID是放在【用户授权获取昵称和头像】中。引申一个知识点,还有一种方式是通过微信官方提供的登录功能获取openID,但在获取UnionID时会出现获取不到的情况,所以并不推荐使用此方法。
  • 如果开发者帐号下存在同主体的公众号,并且该用户已经关注了该公众号。系统可以直接获取到用户的openID/UnionID,无需用户再次授权。
  • 如果开发者帐号下存在同主体的公众号或移动应用,并且该用户已经授权登录过该公众号或移动应用。小程序用户无需再次授权。
  • 用户在小程序(暂不支持小游戏)中支付完成后,5分钟内可获取用户的openID/UnionID,无需用户授权。此应用场景,作者所参与的项目中暂时没有使用过,但感觉扫码购类似的产品中应该会使用。

举个栗子,如果你想要获取用户的昵称头像和手机号,那么需要设计两次点击按钮,并且弹出两次授权弹窗,一次按钮点击获取一种授权,并且只能放在不同的按钮中。设计参考:美团、瑞幸、贝壳租房等小程序。

05 单一登录流程改造跨平台适配案例

5.1 旧方案的背景及流程图

我们的产品是一个分销平台,在最初规划和设计时,由于用人成本的因素,并没有预备研发app,只是单纯的希望通过小程序实现运营推广。但是在运营过程中,特殊的业务模式容易违规,怕被用户举报较多导致封号。高层决定不再依托于微信生态圈,从而倾斜资源自主研发app。所以当时小程序的整个登录流程,需要进行升级改造,用于适配app多设备注册登录。

旧方案流程如下:
在这里插入图片描述
踩的坑有两个地方:

第一,未与研发人员明确登录的概念,研发人员认为获取到用户的openID视为登录成功,对于我们的业务设计来说,获取到用户的手机号码才是真正意义的有效用户。

第二,由于开始并未规划app,导致研发人员在取用户信息时,选择了获取用户的openID,当多个移动应用时,无法获取用户的unionID,用户在各个应用中数据无法打通。

但是改造时,已有300多个授权手机号用户,所以改造方案花了很长时间探讨和研究,最终得出了一个相对来说完整的解决方案。

5.2 改造后的方案

在APP中,我们设计了微信授权登录、手机号验证码登录,手机号密码登录三种登录模式。微信授权登录的设计相对来说比较复杂。我只梳理了一个简易流程,研发的思路由项目经理负责输出。
产品设计思路:
在这里插入图片描述
研发思路:
在这里插入图片描述
在设计过程中,我遇到了一个思维误区,当时考虑的问题如下:

  • 用户A—登录小程序—获取到openID—绑定了手机号1—视为老用户
  • 老用户A—使用微信授权登录APP—获取到unionID—绑定了手机号2

如果用户在app登录,有了unionID,他绑定了其他手机号怎么办?这个时候创建一个新用户吗?那就存在一个unionid绑定了两个手机号的情况。

这种场景如何处理?

这个地方的盲区在于,我一定要把openID和unionID关联起来,其实大可不必。在这种情况下,以手机号为唯一标识,视为两个用户即可,只有绑定了相同手机号,数据才会互通合并。创建的新用户,他的openID为空,获取到unionID即可。

即:用户A 是openID+手机号1,用户B是unionID+手机号2+openID为空。

06 最后

小程序快速便捷的研发模式和迭代模式,可以适应大部分互联网产品快速迭代、快速试错的需求,但是全部依赖于微信生态圈会有诸多限制,作为小程序的产品经理,大家应该熟读小程序和公众号的文档,清楚什么可以做什么无法实现,这样在设计功能时,不会走太多弯路,也避免了与研发同学产生冲突,设计了他们实现不了的需求。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ROS:动态参数

目录 一、前言二、概念三、作用四、实际用例4.1需求4.2客户端4.2.1流程4.2.2新建功能包4.2.3添加.cfg文件4.2.4配置 CMakeLists.txt4.2.5编译 4.3服务端(C)4.3.1流程4.3.2vscode配置4.3.3服务器代码实现4.3.4编译配置文件4.3.5执行 4.4服务端(Python)4.4.1流程4.4.2vscode配置4…

EasyCVR视频融合平台能正常播放其他协议流,但无法播放HLS流的原因排查

EasyCVR基于云边端一体化架构,支持海量视频汇聚管理,平台支持多协议与多类型设备接入,具体包括国标GB28181、RTMP、RTSP/Onvif、海康Ehome、海康SDK、大华SDK、宇视SDK等,能对外分发RTMP、RTSP、HTTP-FLV、WS-FLV、HLS、WebRTC等。…

Python 和 RabbitMQ 进行消息传递和处理

一、RabbitMQ 简介 RabbitMQ 是一个开源的消息代理软件,它实现了高级消息队列协议(AMQP)标准。它的官方客户端提供了多种编程语言的接口,包括 Python、Java 和 Ruby 等。它支持消息的持久化、多种交换机类型、消息通知机制、灵活…

【Leetcode】687.最长同值路径

一、题目 1、题目描述 给定一个二叉树的 root ,返回 最长的路径的长度 ,这个路径中的 每个节点具有相同值 。 这条路径可以经过也可以不经过根节点。 两个节点之间的路径长度 由它们之间的边数表示。 示例1: 输入:root = [5,4,5,1,1,5] 输出:2示例2: 输入:root …

MySQL数据库与表的基本操作 + 表的基本CRUD(增删改查)操作

文章目录 前言一、库的基本操作显示当前所有数据库创建数据库使用数据库删除数据库 二、表的基本操作创建表查看库中所有表查看表结构删除表 三、表的增删改查(基础)新增数据(Create)全列插入指定列插入 查询数据(Retrieve)全列查询指定列查询查询字段为表达式指定列的别名去重…

【Kubernetes运维篇】RBAC之准入控制器详解

文章目录 一、ResourceQuota准入控制器1、ResourceQuota是什么?2、限制CPU、内存、Pod数量、Deployment数量3、限制存储空间大小 二、LimitRanger准入控制器1、LimitRanger是什么?2、LimitRanger限制案例 一、ResourceQuota准入控制器 中文官方参考文档…

scrapy

scrapy介绍安装--架构 Scrapy 是一个爬虫框架(底层代码封装好了,只需要在固定位置写固定代码即可),应用领域比较广泛---》爬虫界的django# 安装 #Windows平台1、pip3 install wheel #安装后,便支持通过wheel文件安装软…

c#调用cpp库,debug时不进入cpp函数

选中c#的项目,右击属性,进入属性页,点击调试,点击打开调试启动配置文件UI,打开启用本机代码调试。

相机标定学习笔记

Kalibr 是标定工具中,唯一一个可以标定camToImu的,是vio必不可少的工具,其他的都有替代品。所以学习多种开源算法进行相机标定,并记录学习相机标定的过程。 一、相机标定 1、在场景中放置一个已知的物体 (1&#xff…

MySQL的四种主要存储引擎

目录 (一)MyISAM (二)InnoDB 1)自动增长列: 2)外键约束: (三)MEMORY (四)MERGE 什么是存储引擎? 对MySQL来说,它提供了存储不…

【wifi模块选型指导】数据传输WiFi模块的选型参考_USB/UART接口WiFi模块

数据传输WiFi模块有USB接口和UART接口两大类,为满足行业客户的不同应用需求,SKYLAB研发推出了多款2.4GHz单频,2.4/5GHz双频的USB接口WiFi模块和UART接口WiFi模块,数据传输能力,传输距离各有不同。怎么选才是最适合的呢…

基于ResNet50算法实现图像分类识别

概要 在本文中将介绍使用Python语言,基于TensorFlow搭建ResNet50卷积神经网络对四种动物图像数据集进行训练,观察其模型训练效果。 一、目录 ResNet50介绍 图片模型训练预测 项目扩展 二、ResNet50介绍 ResNet50是一种基于深度卷积神经网络&#xff…

性能测试需求分析怎么做?(中)

本系列文章我们为大家系统地介绍一下性能测试需求分析,让大家全面掌握性能测试的第一个环节。本系列文章将会从性能测试需求分析整体概述、性能测试需求分析内容、性能测试需求分析方法这三个方面进行展开。在(上)部分中,我们为大…

238. 除自身以外数组的乘积

题目描述&#xff1a; 主要思路&#xff1a; 正逆各扫一遍&#xff0c;利用数组存储当前数左边和右边的乘积。 class Solution { public:vector<int> productExceptSelf(vector<int>& nums) {int nnums.size();vector<int> ans;int l[n1],r[n1];l[0]1,…

python将dataframe数据导入MongoDB非关系型数据库

文章目录 pymongo连接新建数据库和集合pandas导入数据插入数据数据查看 pymongo连接 import pymongo client pymongo.MongoClient("mongodb://localhost:27017/") dblist client.list_database_names() for db in dblist:print(db) #查看已有数据库admin bilibil…

【kubernetes系列】kubernetes之计算资源管理

资源类型 在 Kubernetes 中&#xff0c;Node 提供资源&#xff0c;而 Pod 使用资源。其中资源分为计算&#xff08;CPU、Memory、GPU&#xff09;、存储&#xff08;Disk、SSD&#xff09;、网络&#xff08;Network Bandwidth、IP、Ports&#xff09;。这些资源提供了应用运行…

自动化测试之数据驱动与关键字驱动

目录 1.录制/回放的神话 2.数据驱动的自动化测试框架 3.关键字驱动的自动化测试 初次接触自动化测试时&#xff0c;对数据驱动和关键字驱动不甚理解&#xff0c;觉得有点故弄玄须&#xff0c;不就是参数和函数其嘛&#xff01;其实其也体现了测试所不同与开发的一些特点&…

目标检测——R-CNN网络基础

目录 Overfeat模型RCNN模型算法流程候选区域生成CNN网络提取特征目标分类&#xff08;SVM&#xff09;目标定位预测过程 算法总结 Fast RCNN模型算法流程ROI Pooling目标分类和回归 模型训练模型总结 Overfeat模型 RCNN模型 算法流程 候选区域生成 CNN网络提取特征 目标分类&am…

机器学习1

核心梯度下降算法&#xff1a; import numpy as np from utils.features import prepare_for_trainingclass LinearRegression:def __init__(self,data,labels,polynomial_degree 0,sinusoid_degree 0,normalize_dataTrue):"""1.对数据进行预处理操作2.先得到…

Python-Web框架flask使用

目录 1.Web框架 1.1 flask 1.1.1 debug调试 1.1.2 定义参数web服务 获取字符串 ​编辑 1.1.3 html网页渲染 1.13.1 带参数传给网页文件 普通元素 列表元素 字典元素 1.Web框架 1.1 flask python的web框架&#xff0c;目录结构如下&#xff1a; 1.static存放的是css,…