豆邮windows客户端(第三方)开发详解
“豆邮”,是社区网站“豆瓣”的一个类似私信的功能模块。在豆瓣官网,“豆邮”曾一度被改为“私信”,但在遭到众多豆瓣用户的强烈反对之后又改了回来。然而,在豆瓣的移动客户端上,仍称呼为“私信”。
豆邮的设定我想最初真的是当做邮件的形式来让用户之间交流的,可随着移动端的普及,豆邮被很多用户当成了即时通讯软件来使用,根本停不下来。
“就不能加个微信qq之类的吗?”
“不,那样不文艺。”
为了将这种不良的风气,额,发扬光大,我决定写一款桌面软件,好让众多豆瓣文艺青年,可以边工作边聊天,再也不用频繁看手机了。
--------------以下才是正文-------------
一、豆瓣API
1.使用Fiddler分析安卓客户端所发出的请求。
简要步骤:开启Fiddler的“允许远程连接”,设置端口号,手机和电脑需要在同一个wifi网络下,设置手机wifi的代理到电脑,此时,手机的所有http请求都能够在Fiddler中监听到。之后开启https的监听,设置host过滤,只监听豆瓣的api地址。
其中,在Composer标签页中可以清楚的显示请求的Url,header,body等信息,并且能够通过随意修改这些数据进行调试,非常方便。
之后,我们便得到了豆瓣的各种API接口,包括登录与注销、获取用户信息,聊天列表,聊天内容,关注列表,消息通知等。
2.OAuth2.0 认证授权
在使用用户名和密码登录之后,会生成一个access token以及refresh token。access token 将作为用户登录的唯一凭证,使用时将其赋值给header请求中的Authorization: Bearer即可。首次登录后,我们将access token保存到本地,使用户下次可以直接登陆而不需要重新输入用户名和密码。
OAuth2.0将access token设计为短效的,在一定时间内会过期。根据需要我们可以使用refresh token对access token进行刷新,形成新的凭据。具体方法是将请求中的grant_type的值更改为refresh_token即可。
二、使用WPF进行界面绘制
1.使用XAML高仿了微信windows客户端的界面。
界面效果如下:
2.使用web前端构建简单的聊天窗口。
聊天窗口使用了WPF自带的WebBrowser控件,默认内核版本是IE7(可以通过修改注册表的方式换成更高版本的IE),自然不支持H5以及CSS3。讨厌IE的同学,可以使用第三方的浏览器内核控件。之后自己动手写一下CSS样式以及JS交互,简单测试一下兼容性问题就OK了。
3.适配高分辨率屏幕
WPF原生支持高分辨率,幸福满满。
只是WebBrowser控件在高DPI的屏幕下,没有按照系统默认进行缩放。还好IE支持zoom属性,我们通过一定的缩放比例来对网页的body的zoom属性进行设置。那如何确定这一比例呢?一般来说96DPI对应100%,144DPI对应150%。OK,问题解决。
四、后台逻辑
1.多线程分离保证界面流畅
务必将http请求服务放入后台执行,任何时候都不能让界面去等待。本例中主要使用Task来进行处理。
2.“即时”聊天体验
豆瓣API中有单独监测消息提醒的接口,可返回未读消息数量以及提醒版本号,我们只需对该请求进行轮询,并比较返回的版本号,就可以做到对未读消息进行提醒或显示处理。
3.MVVM数据绑定模式大大提升了编程体验。
用过的都说好。
五、待补充的功能
1.发送和显示emoji表情。
2.搜素新用户。
六、参考与感谢
1.受以下文章启发:
【完全开源】知乎日报UWP版(上篇):界面设计、官方API分析
UWP开发之控件:用WebView做聊天框
2.使用以下开源组件:
Json.NET
七、开源发布
软件在功能完善之后,将开放安装包与源代码,共同学习交流。
转载于:https://www.cnblogs.com/shinexyt/p/5159999.html
豆邮windows客户端(第三方)开发详解相关推荐
- 【Windows 应用程序开发详解】四.Windows开发基本概念和相关术语(一)
[Windows 应用程序开发详解]四.Windows开发基本概念和相关术语 一.Windows API 二.服务.函数和例程 一.Windows API Windows API介绍: Windows ...
- 【Windows 应用程序开发详解】三.Windows开发工具配置与使用(一)
[Windows 应用程序开发详解]三.Windows开发工具配置与使用 一.Visual C/C++ 我们都知道在应用程序开发的时候都是要依赖于开发工具的,Windows主机应用程序绝大多数都是使用 ...
- wpf 客户端【JDAgent桌面助手】开发详解(四) popup控件的win8.0的bug
目录区域: 业余开发的wpf 客户端终于完工了..晒晒截图 wpf 客户端[JDAgent桌面助手]开发详解-开篇 wpf 客户端[JDAgent桌面助手]详解(一)主窗口 圆形菜单... wpf 客 ...
- Android高效率编码-第三方SDK详解系列(二)——Bmob后端云开发,实现登录注册,更改资料,修改密码,邮箱验证,上传,下载,推送消息,缩略图加载等功能
Android高效率编码-第三方SDK详解系列(二)--Bmob后端云开发,实现登录注册,更改资料,修改密码,邮箱验证,上传,下载,推送消息,缩略图加载等功能 我的本意是第二篇写Mob的shareSD ...
- Android高效率编码-第三方SDK详解系列(三)——JPush推送牵扯出来的江湖恩怨,XMPP实现推送,自定义客户端推送
Android高效率编码-第三方SDK详解系列(三)--JPush推送牵扯出来的江湖恩怨,XMPP实现推送,自定义客户端推送 很久没有更新第三方SDK这个系列了,所以更新一下这几天工作中使用到的推送, ...
- wpf 客户端【JDAgent桌面助手】开发详解(三) 瀑布流效果实现与UI虚拟化优化大数据显示...
目录区域: 业余开发的wpf 客户端终于完工了..晒晒截图 wpf 客户端[JDAgent桌面助手]开发详解-开篇 wpf 客户端[JDAgent桌面助手]详解(一)主窗口 圆形菜单... wpf 客 ...
- C# Windows 窗体编程入门详解
C# Windows 窗体编程入门详解 基于Web的B/S架构应用程序近年来确实非常流行,B/S易于部署.易于维护的特点使Web应用程序开发得到了前所未有的发展.但是,Web应用程序的缺点是,它们有时 ...
- C#socket之TCP开发详解(一)
文章目录 C#socket开发详解(一) 简介: 预备知识: 相关概念梳理: 1.什么是socket? 2.什么是TCP/IP.UDP? 3.socket与TCP/IP.UDP的关系? 4.TCP与U ...
- 基于证书的WCF安全开发详解
基于证书的WCF安全开发详解 前几天成功建立起了一套基于证书的安全的WCF服务,很兴奋,现在做一下总结,希望大侠们指点,也希望能帮助到一些菜鸟,哈哈. 一.安全通信的基本过程 这里只做定性的理论上的分 ...
最新文章
- nagios系列(六)之nagios实现对服务器cpu温度的监控
- 用php获取本周,上周,本月,上月,本季度日期的代码
- java网格式布局登录界面_Java学习笔记------自己书写的登录界面实例
- sphinx+coreseek+php扩展--用php程序实现中文拆词
- Apache ServiceComb
- python -m xxx.py和python xxx.py的区别
- python编程与数学书籍
- centos 6.5 rsync+inotify 实时同步
- ubuntu 上 nvidia-smi 没显示所有的GPU
- 彪悍榴莲姐再袭 这次一口气吃掉10斤
- linux bash错误,linux bash错误重定向输出
- textarea 滚动条属性设置
- 几种常见的软件开发模型分析
- 7-12 特立独行的幸福 (25 分)(如何判断特立独行)
- WARNING: The converted filename is an ASM fully qualified filename.
- Redis配置详解(转)
- 闹钟和时间管理工具Alarm Clock Pro mac
- 如何将AVIF格式转换为PNG格式
- UOS下使用HHDESK文本编辑功能
- 怎么把图片弄成logo_怎么把logo变成矢量图
热门文章
- 【算法设计与数据结构】URAL 1323. Classmates
- TMS iCL完整源代码,Delphi的iOS组件的组件库
- 关于1970年之前的时间要怎么转换成时间戳啊 负数要怎么处理
- SpriteKit Programming Guide手游开发之(FAKE STICK HERO)-李珊-专题视频课程
- javascript前端SEO优化总结
- QT基础之QToolBox工具盒类
- CCS3.3安装常见问题(以合众达的为例)
- 意大利ADFweb网关、现场总线通讯网关
- 秦始皇“一统天下”为何独留卫国
- 《从0到1上线微信小游戏》第十二节 实现截图和保存到相册功能