Meebox诞生历程

图片

各位小伙伴们,大家好,我是⌈路过⌋,一名北漂12载的大龄程序员,也是Meebox的开发者。

大学毕业后就职于某国企,两年后跳槽到某网络安全公司,负责网络安全类APP的开发。在这家公司一待就是10年(我都敬佩自己能在一家公司待这么久,呵呵),我也从刚毕业的精神小伙变成了现在拖家带口的中年大叔。

一想到自己马上也要到程序员的职业生涯末期了(35岁),回想起自己的生涯,貌似也非常的平平无奇,之前总想着要做些什么,只是有一些想法,从来没有行动过,直到某一天,发生了一件事情。。。

需求源于生活

同事小H是一个有些帅的小伙,虽然年龄不大(相对于我们这些老人),但是“车龄”不小,是一位资深的老司机。

公司新招的女程序员,称为小W。

故事就从小W向小H借手机调试程序开始,估计看到上面的介绍,不少小伙伴们已经猜到故事的发展了,不过我还是要讲述一下。

上午的时候,小W向我演示新开发的功能,需要用到实机演示,于是把我和小H的手机借过来(两个手机,不同的品牌),我一直在旁边观看,在我的手机上测试着没问题,接着换小H的手机,在测试切换应用的时候,只见小W熟练的切换、滑动应用列表,随着滑动的慢慢停止,一个老司机才懂的画面刚刚好就留在了手机屏幕上,小W反应也快,马上就继续滑动应用列表,装作没看到一样。

哈哈,当场社死!😱😱😱

我就在想,幸亏小H不在旁边,如果他看到这一幕的话,估计都要自闭了。

中午的时候把这事儿告诉了小H,小H也很震惊,他告诉我,可能最近和女朋友一起住,消耗太大,记忆力都衰退了,否则凭他的段位,又怎会如此的马虎。

不愧是老司机,一脚油门就开始漂移。

晚上和小H一起吃饭,小H跟我讲起他刚大学毕业的时候发生的一件事情,虽然没有上午的事情那么尴尬,但是对于小H来说,也尴尬到无地自容。

小H大学毕业后买了一个Android手机,然后拍了一些和女友的合照,别瞎想,也就是正常的搂搂抱抱而已。回老家后,堂姐来串门,看到了小H的新手机,于是想要拿过来看看(因为堂姐也想要买手机,所以想拿小H的手机看看好不好用),小H也没多想,刚要把手机给堂姐,突然脑袋一灵光,想起来自己刚才在看女友的照片,这要是被堂姐看到了,全家估计就都知道了,因为家里大人都在旁边唠嗑。

情急之下,只能尴尬的说到,稍等一会儿,自己要先把一些信息保存一下,然后飞快的将所有女友的照片删除了,然后将手机再次递给堂姐,这时,小H明显看到堂姐那憋到快要扭曲的脸庞。

听他讲完,我觉得这孩子能活到现在也是一个奇迹了。😅

作为一个移动应用开发的程序员,被同事借手机调试已经司空见惯了,之前也想过开发过这样一个程序,能够防止别人窥探手机上的隐私,但就像前面说的,想法是有,不过也仅限于想法了。

在这两件事之后,我就在想,要不要行动起来把这个东西做出来?

即便没有市场,那做出来自用也是极好的。

不过,静下心来想想,如何才能避免手机上的照片被别人看到呢?

  • 不要把手机给别人:不过肯定会有例外的情况,对象要查岗的时候,能不给看吗?

  • 将图片隐藏起来:这倒是个好办法,而且Android系统也支持图片隐藏(不显示在图库中),但是一个懂Android开发的程序员,很容易就扒出来这些隐藏的照片,不过谁又刚好有一个爱扒人相册的程序员朋友呢!

  • 隐藏图片固然可以,但是当你正在看图片时,突然有人借你手机(你不得不借的情况下),你又来不及划掉已打开的图片,仓促之下只能锁屏,这时候,你敢在别人的注视下解锁吗?

  • 加密图片,这个就更高级一些了,可以避免你爱扒人相片的程序员朋友扒你相册,不过还是解决不了上面那种case。

如果把上面这些case都解决了,是不是就行了?

于是一个简单的需求就出来了:

  1. 应用可以隐藏或者加密图片
  2. 应用可以预览图片
  3. 应用需要监控屏幕变化,一旦处于非可视状态,马上结束图片的预览

继续打磨需求

为了避免扒人相册的程序员朋友扒相册,所以要加密图片后保存到手机上。

既然加密了,那就得解密才能预览,因此需要设计一套完整的加解密体系,刚好,我这些年的工作积累派上用场了。

既然要加解密,那也可以用到其他数据上,只用来加密图片就有点简单了,可以加上视频,文件,甚至文本。

如果要加密文本的话,那将文本保存成文件肯定就不合适了,所以就得用加密数据库了。

这样一想,大概的产品构思也就出来了:

  1. 应用要需要设置主密码,而主密码会作为所有数据的根密码
  2. 应用支持加密文本、图片、视频、文件等数据类型
  3. 应用最好能够离线运行,因为别人未必会相信你的应用是清白的
  4. 图片和视频能够在应用内预览,也就是说支持图片查看,支持视频播放
  5. 在监测到锁屏或者切换应用时,弹出自己应用的锁屏,并且在应用列表中将预览图设置为不可见
  6. 既然数据都加密了,那再增加一个密码功能,貌似也不是不可以(但是别人都不信你的应用是清白的,你开发了一个密码管理功能,又有谁会用呢?🐶🐶🐶)
  7. 还有很重要的一点,就是可以防熟人窥探,例如你的TA

在这几条的基础上,又不断的打磨、细化、修改需求,需求搞定后,又去设计整个应用的加密协议,最终形成一个完整的闭环:

  • 主密码就是根密码

  • 所有的数据加密都离不开主密码

  • 主密码又不会直接参与数据的加密

用户只需要牢记主密码,并且确保主密码足够复杂,就能够确保数据足够的安全了。

为什么是足够的安全而不是十分的安全呢?因为主密码模式并不能防熟人,也防不了你的TA。🐶🐶🐶

同类产品调研

在确定了需求后,下一步就是调研同类产品了,因为自己用的华为手机,所以从华为市场下载了十几个同类型的产品,又从google play上下载了一些,总共大概二十款吧,经过了一轮测试后,最终留下了9个(我就不透漏这些应用的名字了,去各种市场上搜”加密相册“、”保险箱“、”隐私相册“等关键字,找到下载量最多的就是了)。

其他的要么就是功能简单,要么广告严重,都被卸载掉了,留下的这几款大部分的下载量都已经超过了百万了,其中有一款在google play上的下载量已经超过了5000多万,这对于一款工具类的应用来说,已经算是相当可以了。

通过对这些应用的使用,我总结一下这类应用的特点:

产品创新点

  • 伪装方式很丰富,例如伪装成记事本,计算器
  • 支持锁屏,支持告警模式,例如连续输错密码,自动拍照留存
  • 能够云备份数据
  • 支持假密码模式
  • 支持数据迁移
  • 不同平台的支持

不满意的地方

  • 在图片加密这块,要么不加密,要么加密是收费功能😅😅😅
  • 大多数只支持图片和视频,很少支持其他类型的文件
  • 非会员几乎都包含广告,有几款已经严重影响使用了
  • 大多数的锁屏密码只支持数字,并且只支持4位数字
  • 指纹解锁要么没有,要么是收费功能

通过对同类产品的简单使用,我没有找到一款让我满意的,有可能是我想要的有点多,又有点强迫症吧。

这些应用都有如此高的下载量,说明已经受到了用户的认可,还是必须要承认别人的优秀的。❤️❤️❤️

最终确定的需求(目前为止)

通过对同类产品的调研,然后又结合自己的想法,然后我确定了应用主体的需求:

  • 支持备忘,目前来说,就是简单的文本,并非富文本,但是备忘可以单独添加图片
  • 支持密码管理
  • 支持创建图片和视频相册,相册支持设置封面,并且能够对封面图片进行简单的编辑
  • 支持图片和视频的导入,其中视频支持分块保存
  • 支持文件管理
  • 支持锁屏
  • 支持离线模式
  • 支持防熟人窥探模式
  • 所有的数据(包括缩略图)全部加密保存
  • 不支持应用伪装
  • 暂时不支持云备份
  • 不支持拍照导入
  • 不支持假密码模式
  • 暂时不支持数据迁移
  • 暂时只支持Android平台

大概就是上面这些了,其他同类产品的优点在我这边竟然大部分都没有采用,哈,一身反骨。😅😅😅

为什么没有向市场上已经很成熟的同类产品虚心学习呢?

首先,我个人比较注重使用体验,所以目前来说,不会添加广告。

其次,拍照的话,感觉实用性不大,而且还会引用拍照权限,会导致用户对应用的不安心理更多一分。

然后就是假密码模式:防一下普通人可以,懂技术的,或者用过类似应用的用户,一眼就看穿了。

其他的功能,像应用伪装、数据迁移以及其他平台(主要是IOS)支持,可以放在二期里面,如果能活到到时候的话。😅😅😅

云备份,遥遥无期。

原型设计

要使用一款原型设计工具很简单,但是如何设计出合理的原型,那就不简单了,工具我用的Adobe XD,后来这款工具经常出问题,然后就同步数据到了MasterGo上,现在也一直在用MasterGo

原型设计从开始构思到最终稿,自己改了不下五遍,最终也没改的多满意,终稿拿给一个已离职的QA同事看,她直接回了我一句:”果然是程序员,这设计的太直男了“,没办法,这东西,从头到尾,都需要自己一个人来搞,需求,原型,编码,切图,服务器,呵呵,哪有那么多时间来美化原型,莫要要求那么高,Okey?

其实说白了,还是自己不懂审美。😅😅😅

设计的各种页面和各种逻辑操作共计130+,最后做减法,只留下了60+

图片

这是中间某次修改的版本,已经达到了130多张


简单放几张原型图吧,虚心接受大家的吐槽😅

图片

图片

图片

是不是很直男,没办法,直男的审美就这样😅

技术选型

终于来到了自己最擅长的阶段了,原型定好后,就准备编码了,在这之前要先定好技术栈,就目前的移动开发来讲,跨平台开发肯定是首选,毕竟一套代码,多个平台,成本相对来说也较低。

跨平台的话,那肯定优先选择flutter了,事实上也是这么做的,不过这玩意儿坑是真的多啊,最怕的是啥呢,就是升级flutter的版本了,一升级,肯定出问题,不就是这个库不兼容啦,就是那个库报错啦,所以,千万不要在flutter一发布新版本就跟风升级,说多了都是泪!😅😅😅

在快速开发完一个demo后,以release模式运行,发现flutter在listview的滑动上会掉帧,或者说卡顿(每个item布局不一样的情况下),不过随着flutter的升级,以及后期性能上的优化,这个问题会得到解决的。

敲代码

这没什么好说的,业余时间不刷视频了,就写一点,遇到节假日就多写一些,断断续续持续了一年时间吧,终于将主体功能都搞定了,这期间也经过了多次的回炉重造,最终还是坚写完了,剩下一些非主体功能,可以留在后面慢慢迭代了。

写个总结吧

其实在编码阶段,随着功能的实现,我经常在想,这个应用是不是已经偏离了原来的轨道,毕竟,我最开始只是想隐藏一些关键资料,避免借手机式的尴尬。因为做完这些主体功能后,我又完善了一些配套的功能,发现现在这个应用已经不仅限于我最开始的目标,而是朝着大而全的方向奔驰而去,像什么密码管理器啦,文件管理器啦,这两个模块每个单拉出来就是一个比较完善的应用,结果只是被我当作一个模块集成在了应用中。

在开发的过程中我也经常光顾独立开发者的一些网站或者在群里看他们聊天,偶尔也看到他们会讨论这类的应用,有一次在v2ex上看到一个帖子,发帖者说自己想开发一款密码管理应用,想看看大家会不会为这款应用买单,结果,下边的回复全部都是不会,不可能。

然后想到自己的应用,是啊,用户凭什么相信你的应用是清白的?密码这个东西可谓是关系到自己的身家性命,大厂的、国外的、开源的我都不相信,让我相信你一个独立开发者开发的应用?用脚想也是不可能的啦!

虽然知道自己开发的东西在安全上肯定不会有什么问题,更不可能会窥探用户的隐私,但是别人为什么要相信你呢?换位思考一下,如果别人开发了一款密码管理软件,我大概率也会像那些网友一样,回复一个不会,不可能。

为了不让这个密码管理模块沦为鸡肋,后来我重构密码模块,增加了密码提示模式,说白了就是你不用输入完整的密码,输入几位就行了,这几位密码只是对你的一个提示。

一个普通人,虽然有几十上百个账号,但对于密码而言,常用的也就那么几个(再多了就该记不住了),所以只要给予用户一个提示,他自然而言就能够记起来这个账号对应的密码是什么了,当然,那种随机生成的密码除外。

可以说,这个密码提示模式在一定的程度上缓解了用户的信任危机吧。

但是说实话,不信任你的人,你再怎么努力,他仍然不会信任你。