首页 攻略 技巧 IM开发干货系列之23篇:IM消息送达保证机制实现

IM开发干货系列之23篇:IM消息送达保证机制实现

更新时间:2022-10-22 18:25:42 分类:技巧 浏览:45

2. IM开发干货系列文章

本文为系列文章第23篇,大致内容如下:

《IM消息传递保障机制实施(一):确保在线实时消息的可靠传递》

《IM消息传递保障机制的实现(二):确保离线消息的可靠传递》

《如何保证IM实时消息的“顺序性”和“一致性”?》

《IM单聊和群聊的在线状态同步应该“推”还是“拉”?》

《IM群聊消息这么复杂,如何保证不丢不重?》

《一种终端IM智能心跳算法的设计与实现探讨(含示例代码)》

《移动端登录IM时如何拉取数据保存数据?》

《通俗易懂:基于集群的移动IM接入层负载均衡方案分享》

《移动IM多点登录与消息漫游原理》

IM开发基础知识补课(一):正确理解Pre-HTTP SSO单点登录接口原理

IM开发基础知识补课(二):海量图片文件如何设计服务器端存储架构?》

IM开发基础知识补课(三):快速了解服务器端数据库读写分离原理及实用建议

IM开发基础知识补课(四):正确理解HTTP短连接中的 , 和 Token

《IM群聊消息的已读回执功能如何实现?》

《IM群聊消息是存储一份(即扩散阅读)还是多份(即扩散写作)?》

《IM开发基础知识补充教程(五):通俗易懂、正确理解和善用MQ消息队列》

“一种确保 IM 消息时效性的低成本方法”

IM开发基础知识补课(六):NoSQL还是SQL for ?读到这里就够了!》

《IM中“附近的人”功能的实现原理是什么?如何高效实现?》

IM开发基础知识补课(七):主流手机账号登录方式原理与设计思路

《IM开发基础知识补课(八):史上最火,彻底搞懂乱码问题本质》

《如何实现IM的扫码注册功能?一篇了解主流应用扫码登录技术原理的文章》

《我想做手机扫码登录?一起来看看微信扫码登录功能的技术原理》(本文)

三、原理分析

微信扫码登录现在是日常生活中常见的场景之一,但要知道手游扫码登录平台,微信刚发布这个功能的时候,就让大家大吃一惊。令人惊奇的是,移动设备和 PC 以如此巧妙的方式连接在一起。

以下是典型的微信扫码登录流程:

本来想在网页版微信上截图,但是扫码登录后出现如下提示(好像很多人都遇到过):

嗯,这很微信。反正我就是不希望你用好,用户喜欢。. .

如上图所示,操作流程如下:

1)第一步:在电脑上打开PC端(出现二维码);

2)第二步:拿出手机扫描二维码;

3)第三步:PC显示扫码成功;

4) 第四步:手机端“确认”登录;

5) 第五步:成功登录PC。

上述实际操作过程,用户体验还是相当流畅的,难怪刚出来的时候能惊艳到很多人。

那么,上述操作流程的技术实现原理是什么?

回忆一下之前听过的前端和后端的概念,知道账户的数据信息一般都放在服务器上手游扫码登录平台,前端负责从后端“求数据”并展示出来它,后端响应前端的“乞求”。

这样,猜测微信登录的过程可能是:

1)网页前端向微信后端请求账号数据;

2)微信后台接受网页前端的请求,然后返回他的账号数据;

3)网页前端收到数据后,在浏览器中显示。

于是,我赶紧画了一张示意图:

正要得意的时候,突然看到桌面上的手机。哎,如果只是这样一个过程,那手机的作用是什么?然后我开始意识到问题并不是那么简单。

好了,我们城市再深入一点,探索一下微信扫码登录的流程。

4.过程分析

更深入的分析整个过程,我们可以去微信网页版,地址是:.

笔者看着网页上巨大的二维码陷入了沉思——这个二维码和手机账号有什么对应关系吗?如果不是,它是怎么产生的?

想了想,我打开了浏览器的开发者工具。

我在网络监控列表中找到了这个二维码,对应的链接是:

如下所示:

然后习惯性的尝试多刷新几次页面,发现二维码一直在变,链接也一直在变:

似乎发现了什么:二维码在不断变化,对应的链接尾部的代码也随之变化,而且是随机变化的。

这意味着每次页面刷新都会随机且唯一地生成一个二维码。这可能与登录手机的过程有关。

IM开发干货系列之23篇:IM消息送达保证机制实现
IM开发干货系列之23篇:IM消息送达保证机制实现

似乎开始明白了,于是我再次拿起手机,这时候熟练地用微信扫了二维码。

“叮”的一声,网页上的二维码一下子变成了我帅气的微信头像。这时候我才恍然大悟,原来网页是在扫码之后才和他的微信账号建立连接的。

如下所示:

那是:

1)扫码前,页面上的二维码只是随机生成的二维码,与用户无关;

2)用户扫码后,二维码与用户账号绑定。

原来手机扫码的使用是这样的!

这时,我注意到手机微信上弹出了“微信登录确认”的提示。这次小心翼翼的点击了下方的登录按钮。

如下所示:

随着流畅的动画一闪而过,网页上显示了我的微信账号信息,表示微信账号已经登录。再次经历这个过程后,我开始思考手机微信在登录过程中扮演的具体角色。

首先你需要了解几个流程:

1)进入网页登录界面,随机生成一个二维码;

4) 从网页获取的账户信息会显示数据。

五、原理说明

回顾上面的过程,结合最初的原理猜测,我开始思考整个环节,我的理解有什么问题。. .

1)网页的二维码来自哪里?

2) 谁从微信后台请求账号数据?

实际上:不同的网站可能需要通过微信后台获取数据,所以每个网站也必须有自己的后台才能向微信后台发送请求。

这样就可以解释整个过程:

1)网站页面刷新,网页后台向微信后台请求授权登录;

2)微信后台返回登录所需二维码;

3)用户在手机扫描二维码并授权手机登录后,微信后台通知网页后台已授权;

4)网页后台向微信后台请求微信账号数据;

5)微信后台返回账号数据;

6)网页后台接收数据并通过浏览器显示;

6.技术分析

上一节提到,在思考了整个过程之后,我们应该进一步探索整个过程的技术实现。

在官方微信开发文档中,找到了第三方网站应用微信登录开发指南:

我整理了整个过程,画了这张图:

如上图所示,整个技术实现如下。

(1) 获取二维码:

1)用户打开网站后,网站后台根据.0协议向微信开发平台请求授权登录,并提前传递微信开发平台批准的AppID等参数;

2)微信开发平台验证AppID等参数,并将二维码返回给网站后台;

3) 网站后台将二维码传送到网站前端进行展示。

(2)微信客户端授权登录:

2)微信客户端将二维码的具体uid与微信账号绑定,并传输至微信开发平台;

3)微信开发平台验证绑定数据,在网站后台调用回调接口,发送授权临时票号;

(3)网站后台请求数据:

1)网站后台收到代码,表示微信开发平台同意数据请求;

2)根据网站后台的代码参数,加上AppID并请求微信开发平台进行交换;

3)微信开发平台验证参数并返回;

4)网站后台收到后,可以进行参数分析,获取用户账号数据。

在上述过程中,有几个参数值得说明(来源官方文档):

1)AppID:应用程序的唯一标识,在应用程序提交并通过微信开放平台审核后获取;

2):申请提交微信开放平台审核通过后获取申请密钥;

3)code:授权临时票,第三方通过code获取时需要用到。代码超时时间为10分钟手游扫码登录平台,一次代码只能成功兑换一次后失效。代码的临时性和一次性性保证了微信授权登录的安全性。

整个流程从网站后台向微信开发平台请求授权登录开始。最终目标是获得:

: 用户授权第三方应用发起API调用的凭证

获取到之后就可以解析出用户的一些基本信息,包括头像、用户名、性别、城市等,这样就完成了整个微信扫码登录流程。

7、写在最后

研究到这里,总算是对微信扫码登录的整个流程有了一个大致的了解。似乎并不难。开发者只需在网页后端对微信公众平台进行接口调用,即可实现扫码登录。

拉伸,突然想到需要考虑整个过程的超时问题。比如超时后未扫描二维码,扫描二维码后授权已过期,已获取超时。

我发现一个简单的功能仍然需要在很多细节上考虑。纸上谈兵真的很肤浅。于是决定下次不上网了,花点时间搭建一个服务器,先实现微信扫码登录流程。

但是,您必须先在微信开放平台上注册一个开发者账号,有一个批准的网站申请,并获得相应的AppID和app ID。

想了想,让我走一会。. .

版权声明: 本站内容部分来源网络,版权归作者所有,如有侵权,请联系我们删除!