< 返回首页

标哥的笔记,是记录在日常学习技术和日常开发中那些年遇到过的坑!本站为新站,原"标哥的技术博客"中的文章会慢慢移到本站,欢迎收藏本站!
在使用本站过程中,有任何建议请联系标哥! 另,承接App开发、网站开发和微信小程序开发!欢迎联系我们


iOS如何在用户修改头像后正常显示

 作者:标哥    发布日期:2017-01-12 15:40    阅读量:3172次
 

今天有位群友问到这样一个问题:

使用SDWebImage的时候,从服务器请求回来的头像URL没有变化,但是用户已经修改过头像,由于App本地头像缓存的原因,不能显示出最新修改的用户的头像。在不去掉缓存的条件下,如何显示出最新的头像呢?策略是什么?

针对这个问题,我想了想,很有必要出文章记录下来,并通过微博通知各种业界iOS大老们,希望得到他们提供解决方案。

淘宝、京东如何处理的

想到这样一个问题,自然会首先想想像淘宝、京东等电商App中会有大量的图片。比如,一个商品有很多的图片,其中,商家很可能在营业过程中突然修改商品的某个图片,但是所生成的图片的URL是固定链接,只是图片的内容被替换了而已。

那么问题来了,App端如何知晓哪个图片的内容发生了变化呢?如果不能确定图片内容发生变化,那么自然会直接读取缓存中的图片来显示。服务端是如何通知客户端的呢?

大家怎么想?求在评论中提供方案。

方案一

笔者所能想到的方案:

笔者针对这个问题,第一想到的就是通过图片的摘要验证。服务端在接口中返回用户信息时,连同图片的摘要(md5)值也下发到客户端,然后每次App登录时,服务端都将最新的用户信息返回来,客户端将本地所缓存的用户头像取出,也生成摘要(md5)五,与服务端所返回来的md5值比较,若相同表示没有头像没有修改过;若不相同,表示头像已经修改过。

缺点:只要重新登录或者App在后台自动登录后,才能更新。也就是说,如果用户没有退出登录,或者没有过期而不会自动登录,头像也没有更新得了。

方案二

在微博上收集到大家的方案。给URL添加一个参数version,当图片修改之后,URL的version发生变化,那么就会重新下载图片来缓存。

缺点:与方案一类似,要求重新请求数据才能得到最新的URL。

方案三

在修改图片时,要求不能使用相同的名字,这样链接路径是一样的,但是因为名字不同而找不到。此时,就会重新获取图片而不是缓存的。可以在文件名中带上前缀进行上传,譬如avatar-3/v1.jpg,更新后改为avatar-3/v2.jpg。

方案四

客户端在请求头加上If-Modified-Since字段,表明请求此时间后最新的文件资源,服务端也会在响应头返回这个last-modified字段表示上次修改时间。

来源于新浪微博用户:@我的双刃剑蜀山第一

最后

希望收集到大家的方案,请在评论中回复或者直接邮件我提供解决方案,并留下您的联系方式,我会在方案中注明由谁提供!


承接:ThinkPHP项目开发、网站项目开发、微信项目开发、微信小程序项目开发、App开发,欢迎联系标哥QQ632840804