为什么微信是屑

屑微信

Be evil

作为一个产品,最重要的部分之一在于其用户体验,然而微信在这一方面表现出了强大的克制性,在添加新功能上保持了很强的自制力。

UI/Performance

项目 WeChat QQ Telegram
性能优化 聊天列表滚动页面,iPhone 6(老手机)下严重掉帧,一加 7 pro (新手机)偶尔轻微掉帧。桌面端少量掉帧 和微信类似。桌面端掉帧较严重 几乎无掉帧。iOS的聊天窗口有非线性动画,观感极佳
UI 设计 6.0 之前古董风格,6.0 之后有大量扁平化和圆角处理。[1] 方正的扁平化风格 每个平台都贴近于原生设计风格,例如Android 端使用标准的 Material Design,iOS端使用和内置应用几乎完全相同的设计风格和动画模式, Windows Phone 则是标准的 Fluent Design 式的磁铁风格
安装包大小(Android/iOS),可能依版本变化 46MB/266MB 59MB/255MB 14MB/81MB
多平台适配 iOS, iPadOS, Android, Windows, MacOS, web, (Linux) iOS, iPadOS(适配不完全,很多界面无法横屏显示)Android, Windows, MacOS, (Linux) iOS, iPadOS, Android, Windows, Windows Phone, MacOS, web, Linux

[1] 即使 6.0 更新之后,仍然是主流 IM 中最丑的。

Chatting

这里聊天功能只包含是指在聊天界面(包括私聊,群聊)所体现的功能,不包括消息同步等功能(这些功能过于严重,需要单独批判)。

功能 WeChat QQ Telegram
文字输入     支持斜体/粗体/等宽体/下划线/删除线/自定义标题的URL 等格式化支持,在桌面端有快捷键。同一个人的多条消息会减少间距显示,同时不重复显示头像/昵称 。可以定时发送消息
URL预览 只会对于一些调用微信的分享接口的网站提供预览 同微信 会自动抓取网址并试图提取出标题/文字预览(可手动去掉)。对于一些提供了模板的网站,可以提取出一个只包含主要文字和图片的 Quick View 界面。这些模板可以由用户自行贡献。
回复 不支持 [1] 支持(但是似乎在 TIM 端上只能查看回复不能发起回复)。对于跨度长的消息会失效 支持
消息浏览 可以跳到上一次之后第一条发送的消息,在有新消息时出现跳转到最新消息的按钮 同微信 可以跳转到第一条未读的消息,会记录上一次浏览未读消息时最后读到的一条。在查看某个回复对应的原消息时,可以快速回到回复的位置。有常显示的回到最下按钮
转发 支持多条消息合并转发 支持直接转发和合并转发 支持直接转发
sticker(表情包) 包含能够多设备同步的 sticker 收藏列表和 sticker 商店,但是个人无法发布表情包。sticker 列表有数量限制 同微信 可以以 sticker set 为单位制作,整理和发布表情包,并且通过 URL 直接分享。支持透明背景的表情包。可以将表情包和 emoji 配对,在输入 emoji 时提示表情包
音频消息 支持 [2] 支持,同时有语音识别功能 支持,包含可拖动的进度条和波形图以及速度调节。同时支持以类似的方式发送音频文件
语音聊天 支持 支持,包含多人语音聊天 支持
视频聊天 支持 支持 不支持
图片/视频 支持画笔标注,裁剪,水平/垂直旋转,添加表情包/文字,视频会自动压缩 [3] 同微信 除了上文提到的功能以外,还包含连续角度的旋转和色调/色彩/景深参数调节。支持多个图片以网格形式批量发送
文件 不大于100MB 不大于2GB 不大于1.5GB
群投票 不支持(可以通过小程序实现) 支持 支持
消息记录管理 支持分类/文字搜索 同微信 同微信(中文搜索体验不佳)
消息回执 在桌面端有对方正在输入消息的提示 同微信 有已读回执,会显示对方在输入文字/录制语音/发送图片。在群聊中能精确到个人显示
消息撤回 两分钟内可撤回,撤回后会提示对方 同微信 两天内可撤回和修改,撤回无提示,修改有文字提示。有可选项使得可以同时删除对方设备上的聊天记录
自动加载控制 只能控制在移动数据情况下是否自动播放朋友圈视频 可以控制是否在移动数据下自动下载图片 可以分别自行设定在移动数据/WIFI下,自动接受图片/视频/文件的大小阈值。对于不自动接收的图片/视频,会显示一个模糊化的预览图
界面可定制性 无(目前尚无夜间模式)[4] 支持夜间模式,在iOS 13 下可以和系统同步自动切换。也有可以在主题商店选取个性化主题 内置多种主题配色可供选择,可以个人制作并以 URL 形式发布。可以设定通过亮度阈值/时间阈值/系统模式自动切换夜间模式

[1] 这是微信在聊天界面最落后的地方。没有回复功能对于群聊来说是灾难性的,对于私聊也有诸多不便之处。

[2] 在没有达成共识的前提下,只发送语言是一件比较 annoying 的事情,特别是发送很长的语音和对于比较重要/信息量比较大的消息,经常需要反复听,很浪费时间,也不便于搜索和记录。而微信的用户群体中有不少喜欢用语音的。微信不支持语音识别/进度条使得这个现象更加 annoying。

[3] 视频不仅会自动压缩,而且还不给发送原视频或者调整压缩率的选项,有时候压出来的视频效果很奇妙

[4] 夜间模式的好处大家都懂,开发者也不需要很多精力就可以实现,然而微信并没有。

Management

这里主要列举一些 IM 工具中的管理性质的功能,包括好友管理,聊天管理等等。

项目 WeChat QQ Telegram
用户id 无法修改 [1] 以 QQ 号为唯一 id 可以自定义字符串 id,可随意修改(保证唯一即可)。如果能证明在主流平台上自己持有某个 id,即使这个 id 被占用,也可以向官方申请获取这个 id
好友管理 以首字母方式排列,支持以标签形式筛选/分类,支持包含多种信息的好友备注 以类别为方式分组。支持“特别关心”和多种信息的好友备注 没有“好友”概念,只有单向的“联系人”概念。联系人只支持更改排序方式和备注姓名。添加联系人需要对方发出请求。
群聊管理 可以手动将群聊选择添加到联系人中,否则在聊天列表界面删除群聊即退出群聊(删除所有聊天记录,对于私聊也是如此)。支持置顶群聊 [2] 有单独的管理界面,支持添加“不常用群聊”。支持置顶群聊 所有的群聊和私聊均会在聊天列表显示,删除群聊即代表退出群聊。支持添加不常用群聊(archived chat)。支持置顶群聊
推送管理 可以对于每个群聊设置是否推送消息提醒。可设置特定时间点启动的勿扰模式 基本同微信。可以对于特别关心单独定义推送方式 可以对于每个群聊设置是否推送消息提醒,并且可以快速设置临时性的禁用消息提醒(一小时/八小时/两天)。对于不同种类(群聊,私聊,频道)的消息提醒可以自定义震动方式/预览方式/颜色/推送等级。可以自定义 Badge 上显示消息数量的计算方式。在发送消息时可以选择是否给对方发出推送
多账号支持 需要设定密码来启用,在二级菜单中启用 支持,在二级菜单中启用 支持,在侧边栏(Android)或导航栏(iOS)调用,可以同时接受多个账号的消息
黑名单管理 不支持,但是可以静默删除好友(这是一个比较有争议的 feature) 支持 支持
群聊成员管理 支持二维码扫码进群和面对面建群和邀请进群。二维码有有效期限制。只有通过实名认证的用户才能加入超过100人的群。超过100人的群只能通过私聊发送邀请才能进入。不超过40人的群可以无需确认拉入群聊。群聊人数上限为500 [3] 支持二维码扫码进群和群号搜索/URL分享进群。支持管多种审核机制。普通用户至多建立200人群,付费最多可建立3000人群 支持URL分享进群,其中公开群的URL可自定义,可以通过@的方式直接显示。管理员可以直接邀请联系人入群。可以通过 bot 来实现人员审核。群聊人数至多为20000
群管理员 只对于100人以上的群,群主才能设置至多三名管理员 随群等级的变化可以设置不同数目的管理员数量 无管理员数量限制,有多个级别的管理员权限设置
群公告 支持,发出公告后会推送提醒 [4] 支持,可以查看历史公告,可以选择在特定时候(例如新成员进群时)显示公告窗口 支持置顶消息,置顶消息会在群聊窗口上部显示,可以选择是否推送提醒给成员

[1] 所以某些中二时候的 id 就会伴随一生了

[2] 没有不常用群聊的选项,当有不想收到消息但是消息很多的群聊非常 disturbing。对于私聊有的时候会不小心删掉了一个chat ,然后所有聊天记录就没了。

[3] 有的时候会被莫名拉近一些不想加入的小群聊但是又不好退出。大群拉人又非常麻烦。群成员的控制非常匮乏。

[4] 实际上形同虚设,大部分时候还是选择 @所有人

Security/Privacy

微信在账号安全上采取简单粗暴的方式:一切以短信验证码为准。尽管这个带来了较好的安全性,例如微信的盗号率远低于 QQ,但是相比于支持 two-factor verification 的 Telegram 来说它还有所欠缺。

它不仅安全性方面做的不完全,便利性上更是得到了极大的损失。例如在 PC 端上必须通过手机验证才能登录,而且每次电脑重启之后都要重新登录一次。再例如如果没有携带手机,那么就无法以任何方式登录。(如果用 Google Voice 账号注册的 Telegram,那么即使什么其他设备都没有携带也可以登录 Telegram)

微信和QQ都是采用了端到服务器加密,Telegram 默认也是端到服务器加密,同时对于私聊有可选的端到端加密的 secret chat 选项,在这个选项下可以设置消息自毁时间,实现反截图。

Sync/Multi-device support

原理上说,微信在服务器只储存了没有到达用户客户端的消息(至于会不会记录下来以供有关部门查阅就是另外一回事了),要想在多个设备间传输信息只能利用点对点的传输模式(官方支持的方式是在同一个局域网下可以传输,这在公共条件下有时并不方便,而且根据 v2 上的反馈,速度不太理想)。这样做会产生大量的问题。例如,当 PC 上的微信退出而重新登录后,在此期间所收到的所有消息都不会出现在 PC 上。另一个问题是这个意味着如果我们想要保留微信的消息的话,就必须在本地储存,这样的话本地储存的数据只会越来越多。如果想要删除的话只能将某个人/群聊的消息全部删除,不能按时间删除。

同时微信对于图片/文件等消息的服务器端储存也采用了非常保守的方式——服务器端只会储存几天(大概是7天吧)的图片和文件,如果在这个期间内没有保存文件/查看图片的大图的话,之后就无法下载到文件/查看完整图片了。

最后,微信只支持两个设备同时登录。对于我这种同时重度使用三个设备(手机,PC,iPad 的人来说是极其不方便的。除了手机以外的第二个登录设备需要频繁在 PC 和 iPad之间切换,每次切换还要拿手机扫码(扫码有时还会出现 Connection Error,原因不明),再加上前文提到的消息同步问题,使得多设备切换体验极差。

当然,微信会告诉我们,这一切是为了用户的隐私和安全考虑。但是这并不算是理由。如果有人能够在其他设备上登录你的微信,那么必然你的设备已经被别人控制了,在这样的情况下控制阻止消息同步毫无意义。比起在这上面做手脚,还不如鼓励用户使用 two-factor verification,或者像 QQ 一样使用独立密码。

另一个理由可能是节省服务器成本,但是为什么 QQ 可以多平台同步消息呢(虽然只有会员才能在云端访问消息记录)?难道 QQ 的服务器成本就不需要节省了吗?即使节省了为什么不能像 QQ 一样做一些体验上的优化呢?

最后惯例吹一下 Telegram,不限数量设备可同时登录,所有消息(除了 secret chat)无缝同步,包括未读消息的阅读进度,尚未发送的消息草稿,手机上原则上可以不保留任何消息缓存,可以自定义按时间/按类别自动删除本地缓存节约空间。

Do evil

微信除了在用户体验方面恶心用户以外,也充分利用它的市场占有率,用各种方式培养自己的生态体系——封闭的,牢牢位于腾讯掌控之下的生态体系。这毫无疑问给了微信很多 Do evil 的空间。

De-URL-ization

URL 是互联网的核心,互联网上的资源和 URL 相对应,URL 把不同网站,不同页面上的东西聚合在一起,用户可以随意在不同来源的网页上跳转。这样的互联网才算是互联网。

微信看起来并不喜欢 URL。在公众号文章里面,唯一能够插入 URL 的地方只有末尾的一个意义不明的 “阅读原文”。在正文中,只能插入微信生态圈内部的链接(例如公众号/公众号文章)。至于引证内容来源,扩展阅读之类的链接,只能以一些比较 awkward 的方式插入到文章中。

微信维护了一份 URL 的黑名单(疑似也有 IP 地址的黑名单),当打开黑名单中的 URL 时,微信会提示用户类似于“为了账号安全,不要再网络上输入微信用户密码”的提示消息。只有把 URL 主动复制粘贴到浏览器中才能浏览这个网址。sharzy.in 不幸也惨遭毒手(根据猜测可能 GitHub Pages 的 IP 地址都被拉了黑名单)。黑名单里的网站也有若干种类型,除了上面这种提示语比较温和的类型以外,还有“根据用户举报,此网站包含违法内容”型的黑名单(值得一提的是,https://github.com/996icu/996icu 就是使用这个理由屏蔽的,由此可见这个理由并没有什么可信度)或者 “lewd content” 之类的 illegal content。此外,有的时候屏蔽并不需要什么明面上的理由,例如屏蔽友商(淘宝,拼多多,抖音等)的时候,这样的封杀最大的后果就是出现了“淘口令”这样别扭的产物,至于能否减少 spam,看起来也并没有什么明显的效果。总而言之,在微信的地方微信具有绝对的支配权,这个屏蔽系统既不透明,也没有申诉机制,很难让人相信这只是为了所谓的”保护用户“。

此外更让我担忧的是以微信为首的二维码的 invasion。我并不反对二维码,它在很多情况下是很好的选择

当需要在 app 内部打开一个网页窗口时,Android 和 iOS 都提供了良好的接口来实现这一件事情,Android 是 WebView,iOS 是 SFSafariViewController。iOS 上对于这个有强制规定,但是 Android 没有 —— 所以微信决定自己弄一个。在 Android 上,微信使用了腾讯自家的 V5 内核(Play Store 版本用的还是原生内核)。这个内核基于 Chromium 魔改而来,性能和兼容性都有一些问题(尤其是墙外的链接)。至于为什么要放着好好的原生开源内核不用,非要自己魔改,除了获得更高的控制权以外,就很难想到什么其他的理由了。而控制权是个好东西,这样的话微信就可以加入自己的私有 API 供自己所用了。调用了这些 API 的页面只能在微信内部打开,在外部会出现各种各样的问题。

最后依然吹一波 Telegram,几乎所有内容(群组,聊天消息,sticker set,用户,telegraph 文章,主题)都可以用 URL 标识(https://t.me/rhovel之类的),依靠 URL 分享。前文也提到了它对于 URL 预览的良好支持。

No Native API

除了 URL 以外,微信还不喜欢各个系统提供的接口。iOS 和 Android 提供了各种各样的接口用来优化用户体验,但是微信更喜欢纯洁而不加矫饰的系统,所以这些接口能不用就尽量不用。上文提到的 WebView 就是一例。这样的例子实际上还有很多。

  1. 分享:Android 和 iOS 都提供了 Open in other apps 或者 Share 的接口,使得可以打开一个系统提供的窗口,把某些内容发送到其它应用或者在其它应用内打开,这样的窗口一般都有很高的可定制性(尤其是 iOS),创造了多应用协作的一个比较理想的介质,尤其是加上一些工具性 app,例如 shortcut,Jsbox 可以在这个窗口玩出很多花样。而微信几乎没有在任何地方使用这个接口,而是自己造了一个出来“分享”窗口,其中包含 ”发送至聊天“、“分享至朋友圈”、“用浏览器打开” 的选项,以及还有一些腾讯的自家产品的协作功能,而在这些选项中,最重要的 ”在其它应用中打开“ 的选项却没有被提供(根据目前的观察,只有聊天文件提供了这个选项)。可能有人会认为这样的设计更容易被不熟悉 iOS 或 Android 的人所理解,但是它给其他人带来的方便的确是实实在在的。在解决这个问题上,我认为 Google 在 iOS 上是做的最好的(Google 在 Android 上当然做得没话说),它在显示原生窗口的同时,在原生窗口的上部显示了额外的窗口,这个窗口中提供了一些 Google 自家的接口,并且两个窗口的设计风格保持高度一致,该有的毛玻璃特效,动画之类的全都有。

  2. 3D touch:3D touch 是部分型号的 iPhone 提供的功能,通过控制按压的力度来实现不同的功能,虽然这个功能快要被苹果砍掉了,由此可见,微信选择不支持 3D touch 是深谋远虑的。

  3. 夜间模式:Android 10 和 iOS 13 带来了系统层级的夜间模式功能,目前已经有不少应用适配,微信显然不在其列(毕竟本来就没有夜间模式)。

    2019.12.23 update: 微信 iOS 内测版开始提供夜间模式了,可喜可贺

  4. 快捷菜单:无论是 Android 还是 iOS,长按(或者 3D touch)一个应用图标时,会显示一些选项,可以快速打开一些内容,例如支付宝提供了”扫一扫“,”付钱“,”收钱“等功能。微信则并没有在这一方面提供任何支持,包括 iOS 上的 URL Scheme。

Terrible Desktop Support

  • 小程序 (移动端生态和桌面端的割裂)
  • 朋友圈
  • open file in …
  • 头像
  • 浏览器

Ads

为了充分利用市场占有率,微信近年推出了万众瞩目的朋友圈广告。作为互联网公司,投放广告倒也并不是什么见不得人的事情,广告的观感和出现的频率(目前)也说得过去。唯一让我比较奇怪的是他为什么会给我推送大量在职读本科/考研的广告,也许是因为它已经预见了我即将退学的未来。

Conclusion

最后,愿微信早日倒闭,愿更多人能用上 Telegram。

1
2
3
4
5
   /|                
  / +-----------------+
 <    To be continued |
  \ +-----------------+
   \|               
PREVIOUS
Theoretical Analysis of Multi-layer Neural Network: A Survey
NEXT
结构光技术——原理及其应用