编写极简抖音的难点|青训营笔记


编写极简抖音的难点|青训营笔记

这是我参与「第四届青训营 」笔记创作活动的的第14天

前言

在暑假期间,我参与了青训营Android客户端的结营大项目。需求是做一个极简抖音,其功能包括以下几点:

项目需要实现抖音的 个人中心 以及 榜单页面

个人中心 为APP的主页面,实现了以下内容。

  1. 个人信息的展示
  2. 端侧对数据信息的统计
  3. 点击跳转到详情页查看粉丝和关注者列表
  4. 个人作品的浏览,浏览时个人背景渐变折叠
  5. 点击作品缩略图,页面打开自动播放
  6. 播放页面实现视频流
  7. 允许从播放页面打开抖音
  8. 登录、登出
  9. 登录状态过期自判断,自动跳转提醒重新登录

榜单页面 为APP的功能页面

  1. 单页面切换查看三种类型的榜单

  2. 点击榜单时间,浏览往期榜单序号以及可以选择序号查看往期内容

  3. 点击榜单的子项,可以下弹页面,提供查看子项的详细信息

上面描述的功能是项目中做出了要求,且我们已实现的功能。下面来讲以下我所遇到的难点

授权-第一个拦路虎

极简抖音依赖于抖音登录,那么就需要使用到抖音的第三方sdk。由于在之前的项目中未使用过这类第三方sdk来进行登录,对其特性规则并不熟悉,阅读文档的时候,有些重要的点也没抓到,导致第一个授权问题就栽跟头了。

  • 白名单

    文档需要开启一个白名单,才能完成第一次的授权绑定。但是白名单 trial.whitelist 只在第一次出现了,后面的申请文档没有再讲述过,所以我在未加该字段的情况下就去申请,导致一直返回我不在白名单的错误

  • POST 的 body 类型

    在看到开发文档中给出的 body 类型时候,按照类型和参数填入 Apifox 中进行测试,可以接收到正确的字段。但是当我使用代码写入的时候,我直接新建一个数据类,使用 Retrofit 中的 @Body 传入,结果发现一直传回的是数据错误。知道仔细翻阅资料,我才发现我的理解不到位,直接使用 @Body 注解,传入的类会变为 json 格式,很显然这不符合我们的要求。后来改用 @Field 才成功,因为该字段传入的 body 才是对应类似于 key-value 类型的

Client_Token 的自动更新

client_token 的自动更新方案让我想很久,我需要其更新次数尽量少,在APP开启时候才会去执行更新,尽量在需要用到token之前就更新好。

所以我的解决方案就是在主页面启动的时候才进行一次更新,及页面启动一次就会获得一次最新的 token (其有效时间为2h),之后再启动WorkManager进行2h的自动更新,在主页面销毁的时候,注销这个后台任务。这样子就可以大概率的确保其会自动更新(当然,你得是将改APP挂了2h,未将其销毁)。但是由于其的不稳定性,我还是在获取token前做了判断,若是已经过期,就重新获取一次。

加载Dialog的造成的崩溃

在我对网络加载开启Dialog的加载动画的时候,我发现他不能有两次网络加载。无论网络加载是否做好了同步。经过排查发现,我是错误的使用了单例,由于我错误认为 Dialog 调用了 cancel() 方法之后,其实例依然存在,所以对 Dialog 的创建使用了单例模式。最后造成了,当 Dialog已经取消的时候,仍旧去调用已经不存在的 Dialog 造成了空指针的错误。调用Dialog 的时候不该使用单例模式。

下一篇,我将介绍项目中的优化


文章作者: DYJ
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 DYJ !
评论
  目录