用过微信的同学,大部分应该都知道这个功能,看起来挺神奇的~被问到了,就稍微研究了一下(过程大概是先自己描述,然后综合各方面的解读,尽量做最靠谱的还原)。
二维码登录
- 在PC端,打开登录页https://web.wechat.com/。
这一步,经过我多次实验,每次的二维码全都是不相同的(之前我就是这一点没想到,啊呀)
那么就有合理的解释了:
打开网页的时候,PC端向Server发出这样一个请求:“有人想要使用网页版微信了~”,Server就把一个类似于UIID的东西发过来(我们看到的就是这个编码生成的二维码),UIID是一个唯一的编码,在请求到网页->扫面的这段时间里,这个页面一直在监听服务器端的登录请求。
- 使用移动端扫描二维码。
扫描其实是一个获取UIID的过程,之后会出现“请在移动端点击 确认”的页面,然后在移动端点击确认,由于移动端本身是已经登录的(有access_token),那么移动端将UIID+Token(组合编码)发送给Server。
- PC端页面显示登录成功。
Server接收到移动端的编码,解析之后,服务端生成登录的授权码,通知给正在监听的PC端页面,页面显示登录成功,并显示相应信息。
- 移动端显示登录成功。
PC端登录成功后发回给Server一个携带了UIID的类似200(OK)的确认信息,Server将此信息解析后发给移动端,移动端得到确认,显示确认界面。
这样,之后包括File Transfer的功能就很类似了。
总结
这样实际上就是C-S-C模式:
PC web端 --> Server <-- 移动端
图解如下:
类似的摇一摇传图的实现原理其实也是一样的,登录之后同样类似于File Transfer的原理,不过是动作不一样(一个是拖拽 触发,一个是摇晃 触发)。
- 版权声明:自由转载-非商用-非衍生-保持署名 | Creative Commons BY-NC-ND 3.0
- 转载请注明:Chentao’s Home